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.15f=2.155 打印结果等于 2.15f=3.155 打印结果等于 3.15 f=4.155 打印结果等于 4.16
而且一会后 1.155 打印出 1.16 - -感觉就像闹着玩似的
1 回答
Smart猫小萌
TA贡献1911条经验 获得超7个赞
你把 double f = 1.155; 改成 String f = "1.155"; 之后,就不会存在你说的问题。
你需要了解下 浮点数的精度缺失问题,然后知道为什么有些浮点数在内存中计算机无法表示 —— 一开始就是无法表示的,那么你把它作为参数传递给 BigDecimal,BigDecimal 也只能按照内存中存在的东西来处理。
添加回答
举报
0/150
提交
取消
