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

100 * 5.11 = 511.00000000000006
System.out.println(100*5.11);//511.00000000000006

100*5.11 应该 = 511

但是java中进行运算得到的结果是  511.00000000000006

请问这是问什么?
如果要得到正确的结果有解决办法吗?

谢谢~~
------解决方案--------------------
引用:
请问这是问什么?


搜索 IEEE 754

引用:
如果要得到正确的结果有解决办法吗?


使用 java.math.BigDecimal
------解决方案--------------------
DecimalFormat df = new DecimalFormat("####.##");
100*5.11:5.11是double类型的,计算后的结果也是double类型,根据你想要的格式用上面的代码格式化一下,然后转换成你想要的类型,如果想要int型的就直接强转一下。如用下面的代码转换成两位float类型的结果。
Float y = Float.parseFloat(df.format(y));
------解决方案--------------------
浮点数计算不是完全精确的,可以对计算结果取指定精确度后的值,方法很多,google下吧。
------解决方案--------------------
给5.11 先扩大100倍,计算完再把拿100倍拿掉。float,double在java中存储会有误差,计算的结果也就有一点点偏差了。
------解决方案--------------------
浮点精度问题,老生常谈的问题了。