При изучении 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