JAVA BigDecimal四舍五入保留两位小数问题

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

f=0.155 打印结果等于 0.15
f=1.155 打印结果等于 1.15
f=2.155 打印结果等于 2.15
f=3.155 打印结果等于 3.15
f=4.155 打印结果等于 4.16

而且一会后 1.155 打印出 1.16 - -
感觉就像闹着玩似的

阅读 9.7k
1 个回答

你把 double f = 1.155; 改成 String f = "1.155"; 之后,就不会存在你说的问题。
你需要了解下 浮点数的精度缺失问题,然后知道为什么有些浮点数在内存中计算机无法表示 —— 一开始就是无法表示的,那么你把它作为参数传递给 BigDecimalBigDecimal 也只能按照内存中存在的东西来处理。

推荐问题