我正在 java 中执行以下代码,但对于数学上应该是相同的数字,我得到了两个不同的答案。
public class TestClass {
public static void main(String[] args) {
double a=0.01;
double b=4.5;
double c=789;
System.out.println("Value1---->"+(a*b*c));
System.out.println("Value2---->"+(b*c*a));
}
}
Output:
Value1---->35.504999999999995
Value2---->35.505
浮点数有一定的精度。有些分数无法用浮点数正确显示,这就是可能发生舍入错误的原因。
由于计算的优先级不同,结果也不同。您的每个计算都包含两次乘法。乘法*
Java 中的运算符具有从左到右的结合性。这意味着在(a*b*c)
, a*b
首先计算,然后乘以c
as in ((a*b)*c)
。这些计算链之一恰好会产生舍入误差,因为其中的数字根本无法表示为浮点数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)