Con*_*ure 5 java double subtraction
这是Java中的一个小故障吗?
我去解决这个问题:3.1 - 7.1
我得到答案:-3.9999999999999996
这里发生了什么?
Kev*_*sco 10
这里可以找到一个很好的解释.http://www.ibm.com/developerworks/java/library/j-jtp0114/
浮点运算很少精确.虽然一些数字(例如0.5)可以精确地表示为二进制(基数2)十进制(因为0.5等于2-1),但其他数字(例如0.1)不能.因此,浮点运算可能会导致舍入错误,从而产生一个接近 - 但不等于 - 您可能期望的结果的结果.例如,下面的简单计算结果为2.600000000000001,而不是2.6:
Run Code Online (Sandbox Code Playgroud)double s=0; for (int i=0; i<26; i++) s += 0.1; System.out.println(s);类似地,乘以.1*26得到的结果不同于将.1加到自身26次的结果.当从浮点数转换为整数时,舍入误差变得更加严重,因为转换为整数类型会丢弃非整数部分,即使对于"看起来像"它们应该具有整数值的计算也是如此.例如,以下语句:
Run Code Online (Sandbox Code Playgroud)double d = 29.0 * 0.01; System.out.println(d); System.out.println((int) (d * 100));将产生输出:
Run Code Online (Sandbox Code Playgroud)0.29 28这可能不是你最初可能想到的.
有关更多信息,请参阅提供的参考.
| 归档时间: |
|
| 查看次数: |
6304 次 |
| 最近记录: |