日期:2014-05-20  浏览次数:20683 次

关于小数点后四舍五入保留小数的方法
Java code

double   f   =   111231.5585;  
BigDecimal   b   =   new   BigDecimal(f);  
double   f1   =   b.setScale(2,   BigDecimal.ROUND_HALF_UP).doubleValue();


我用这个方法来保留小数。当为2时结果是111231.56
当为1时,结果为111231.6
当为3时结果是:111231.558(按照四舍五入是不是应该是111231.559)为什么会这样?

------解决方案--------------------
二进制浮点小数问题。

当你写:
double f = 111231.5585;
的时候,计算机实际存储的是:
double f = 111231.558499999999185092747211456298828125

所以后面你就理解了。

要解决这个问题,只能:
BigDecimal b = new BigDecimal("111231.5585");