Java - О округлении ROUND_HALF_DOEN

При изучении BigDecimal (точное вычисление чисел с плавающей запятой) постучали по этой строке кода:
BigDecimal c = new BigDecimal ("18.8452"). SetScale (2, BigDecimal.ROUND_HALF_DOWN);

ROUND_HALF_DOWN округляется, два десятичных знака зарезервированы, первоначально напечатанное значение должно быть 18,84, но результат печатается 18,85

Оказалось, что из-за округления выброшенное значение должно быть точно равно 5 или меньше 5, например, 18,8452, сохраняются два десятичных знака, выброшенное значение равно 0,0052, что больше 0,0050, поэтому оно все равно будет округлено. Код выглядит следующим образом :

//BigDecimal.ROUND_HALF_UP表示四舍五入
//BigDecimal.ROUND_HALF_DOWN也是五舍六入
//BigDecimal.ROUND_UP表示进位处理(就是直接加1)
//BigDecimal.ROUND_DOWN表示直接去掉尾数。
BigDecimal a = new BigDecimal("18.8450").setScale(2, BigDecimal.ROUND_HALF_DOWN);
BigDecimal c = new BigDecimal("18.8452").setScale(2, BigDecimal.ROUND_HALF_DOWN);
System.out.println(a);
System.out.println(c);

отпечатки 18.84
отпечатки 18.85

Опубликовано 6 оригинальных статей · понравилось 0 · посещения 85

рекомендация

отblog.csdn.net/ShaoWeiY/article/details/104703499
рекомендация