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中存储会有误差,计算的结果也就有一点点偏差了。
------解决方案--------------------浮点精度问题,老生常谈的问题了。