我对我的代码有疑问。我知道我的代码中需要更改的内容,但我想了解为什么会发生这种情况,因为我真的想学习基础知识。所以我的代码是:
public class chunnimunni {
public static void main(String[] args) {
double number = 2.0;
while (true) {
if (number == 0.5)
break;
number -= 0.1;
System.out.printf("%8.1f", number);
}
System.out.println ("Finished.");
}
}
此代码将继续并无限期地打印出数字,它不会停在0.5。但是,如果我改变while条件:
while (true)
到
while (number > 0.5)
然后它有效。
如果有人可以解释原因,我会非常高兴。感谢。
答案 0 :(得分:6)
浮点数缺乏精度,因此进行if (number == 0.5)
等比较通常无法按预期工作。
相反,我认为你想要if (number <= 0.5) break
。
如果你真的想在浮点数上做相等,那么你应该采取差异并与一个小数字进行比较。例如,
if (Math.abs(number - 0.5) < 1E-9)