while循环中两个条件之间的差异

mac*_*rre 2 java while-loop conditional-statements

我对我的代码有疑问.我知道我的代码中需要更改的内容,但我想了解为什么会发生这种情况,因为我真的想学习基础知识.所以我的代码是:

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.");
    }
}
Run Code Online (Sandbox Code Playgroud)

此代码将继续并无限期地打印出数字,它不会停在0.5.但是,如果我更改while条件:

while (true)
Run Code Online (Sandbox Code Playgroud)

while (number > 0.5)
Run Code Online (Sandbox Code Playgroud)

然后它工作.

如果有人能解释原因,我会非常高兴.谢谢.

mer*_*011 6

浮点数缺乏精度,因此进行比较if (number == 0.5)通常不会按预期工作.

相反,我认为你想要if (number <= 0.5) break.

如果你真的想在浮点数上做相等,那么你应该采取差异并与一个小数字进行比较.例如,

if (Math.abs(number - 0.5) < 1E-9)
Run Code Online (Sandbox Code Playgroud)

  • @mackanmorre:printf并不重要; 你还在比较浮点值.除非你把它与某种epsilon值进行比较(也就是说,减去这个值并将它放在你预期的那么多的小数位),你可能永远陷入循环中,其值不是*相当*0.5. (2认同)