当我运行以下代码时,出现错误:
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
答案 0 :(得分:5)
我运行了这部分代码并假设您引用了精度错误,例如获取398.20000000000005
和407.00000000000006
而不是398
和{{1}等数字}。
这是由于表达式以浮点格式表示的数量的限制。有些数字可以用十进制格式表示,小数点后的位数有限,但是无法使用有限的精度以浮点格式表示,因此您将得到这些错误。
修改
在您发布您定义为错误的内容之前,我写了我的答案。但没有什么不同。有关浮点精度损失的更多信息,请参阅this link。
值得注意的是,当比较两个浮点数(已经计算)的“相等”时,你应该指定一些小值,或 delta ,这是两者之间的最大差异这两个数字允许它们被认为是平等的,而不是测试绝对平等。
答案 1 :(得分:1)
正如彼得所说,这是由于浮点数的不精确。要修复它,请使用printf,如下所示:
System.out.printf("%.0f\t\t%.1f\n",i,pound);
答案 2 :(得分:0)
错误消息会有所帮助。
在第三行,System.println应为System.out.println:
System.out.println("Kilograms\t Pounds");
答案 3 :(得分:0)
系统没有像println(System.out.println)这样的方法,我也会使用整数。
答案 4 :(得分:-1)
如前所述,您没有提供完整的代码示例
不幸的是,你并没有具体确定问题。
我认为你可能意味着“1 * 2.2!= 2.0”。
如果是这样,问题是“整数截断” - 当你乘以(加,减,除或乘)和整数浮点数时,小数部分是LOST。
按设计:)
这些文章可能有所帮助: