|
|
1
17
如果需要精确的结果,请使用精确的类型:
为什么是3.8000…003?因为Java使用了FPU来计算结果。3.9不可能精确地存储在IEEE双精度符号中,所以它存储了3.89999…相反。3.8999%0.01得到0.09999…因此,结果略大于3.8。 |
|
|
2
3
从 The Java Language Specification :
换言之,这是由于Java在计算余数时所涉及的除法的结果,IEEE74规定截除该除法的答案。这个特殊的案例似乎很清楚地揭示了这种差异。 您可以使用math.ieeeremander获得预期的答案:
|
|
|
3
2
可以使用java.math.bigdecimal及其方法 divideAndRemainder () |
|
|
4
1
如果你知道你要处理的小数的数量,你可以尝试先转换成整数。这只是一个典型的浮点不精确的例子。而不是做
|
|
|
Justin · 如何在Java中以全精度格式化double? 8 年前 |
|
|
Pernoctador · 两个给定数字之间的双精度密度 8 年前 |
|
|
INs · MySQL保存浮点错误 8 年前 |
|
|
Philip.W · 在C中格式化类似xxxxE+xx的双精度 8 年前 |