Java乘法错误

时间:2011-09-05 22:39:43

标签: java multiplication

当我运行以下代码时,出现错误:

double i = 1;
double pound;
System.out.println("Kilograms\t Pounds");
for(i = 1; i<199; i+=2){
pound = i * 2.2;
System.out.println(i + "\t\t" + pound + "\n");
}

错误:

Kilograms     Pounds
1.0          2.2  
3.0          6.6000000005  
5.0          11.0  
7.0          15.400000002  

5 个答案:

答案 0 :(得分:5)

我运行了这部分代码并假设您引用了精度错误,例如获取398.20000000000005407.00000000000006而不是398和{{1}等数字}。

这是由于表达式以浮点格式表示的数量的限制。有些数字可以用十进制格式表示,小数点后的位数有限,但是无法使用有限的精度以浮点格式表示,因此您将得到这些错误。

修改

在您发布您定义为错误的内容之前,我写了我的答案。但没有什么不同。有关浮点精度损失的更多信息,请参阅this link

值得注意的是,当比较两个浮点数(已经计算)的“相等”时,你应该指定一些小值,或 delta ,这是两者之间的最大差异这两个数字允许它们被认为是平等的,而不是测试绝对平等。

答案 1 :(得分:1)

正如彼得所说,这是由于浮点数的不精确。要修复它,请使用printf,如下所示:

System.out.printf("%.0f\t\t%.1f\n",i,pound);

有关如何使用printf的详细信息,请参阅herehere

答案 2 :(得分:0)

错误消息会有所帮助。

在第三行,System.println应为System.out.println:

System.out.println("Kilograms\t Pounds");

答案 3 :(得分:0)

系统没有像println(System.out.println)这样的方法,我也会使用整数。

答案 4 :(得分:-1)

  1. 如前所述,您没有提供完整的代码示例

  2. 不幸的是,你并没有具体确定问题。

  3. 我认为你可能意味着“1 * 2.2!= 2.0”。

    如果是这样,问题是“整数截断” - 当你乘以(加,减,除或乘)和整数浮点数时,小数部分是LOST。

    按设计:)

    这些文章可能有所帮助: