Java中的这个双重数学有什么特别之处?我希望.9 - 1的答案是-0.1,但是响应是-0.09999999999999998
double a = 0.9;
double b = 1.0;
double c = a - b;
System.out.println(c);
>>-0.09999999999999998
答案 0 :(得分:2)
另一个关于双打精度的问题。 双打精度有限。并非所有数字都能准确表示!
答案 1 :(得分:2)
计算机难以实现浮点精度。有关详细信息,请参阅this article和Retain precision with double in Java
对于准确的浮点运算,请使用BigDecimal
答案 2 :(得分:1)
值0.9无法以二进制形式精确表示。
答案 3 :(得分:1)
双是不确切的。这是可以用double表示的最接近的数字。
尝试阅读what every programmer should know about floating point arithmetic.
答案 4 :(得分:1)
任意两个值之间有无数个数字。
任何计算机上都有有限数量的内存位。因此,我们选择表示浮点数的任何方式都不会是精确的。