Java 浮点数的精确计算及四舍五入的设置 四舍五入的设置 (1)、浮点数精确计算 项目中一直存在一个问题,就是每次报表统计的物资金额和实际的金额要差那么几分钱,和实际金额不一致,让客户觉得总是不那么舒服,原因是因为我们使用 java 的浮点类型 double来定义物资金额,并且在报表统计中我们经常要进行一些运算,但 Java 中浮点数(double、float)的计算是非精确计算,请看下面一个例子: System
println(0
05 + 0
01); System
println(1
42); System
println(4
015 * 100); System
println(123
3 / 100); 你的期望输出是什么
可实际的输出确实这样的: 0
060000000000000005 0
5800000000000001 401
49999999999994 1
2329999999999999 这个问题就非常严重了,如果你有 123
3 元要购买商品,而计算机却认为你只有123
29999999999999 元,钱不够,计算机拒绝交易
(2)、四舍五入 是否可以四舍五入呢
当然可以,习惯上我们本能就会这样考虑,但四舍五入意味着误差,商业运算中可能意味着错误,同时 Java 中也没有提供保留指定位数的四舍五入方法,只提供了一个 Math
round(double d)和 Math
round(float f)的方法,分别返回长整型和整型值
round方法不能设置保留几位小数,我们只能象这样(保留两位): public double round(double value){ return Math
round( value * 100 ) / 100
0; } 但非常不幸的是,上面的代码并不能正常工作,给这个方法