在学习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);
a打印的是18.84
c打印的是18.85