当我运行下面发布的程序时,我得到了一些奇怪的结果。浮点变量不工作
该程序假设打印消息的倍数为i = 5,000,000,但是,当我不等于500万的倍数时,它有时会打印消息。
当我将numberOfTests从5000万更改为500万时,程序运行良好。另外,如果我将它从float更改为double,则该程序也可以正常工作。
我现在的代码有什么问题?浮动变量不工作?这是为什么发生?我今后如何防止这种情况发生?
public static void main(String[] args)
{
final int numberOfTests = 50 * 1000 * 1000;
final float IncrementsPercentageToPrintResults = .10f;
for(int i = 1; i <= numberOfTests; i++)
{
if(i % (IncrementsPercentageToPrintResults * numberOfTests) == 0)
{
System.out.println("Currently at " + (int) (((float) i/numberOfTests) * 100) + "%.");
System.out.println(" i = " + i);
}
}
}
Output:
Currently at 10%.
i = 5000000
Currently at 20%.
i = 10000000
Currently at 30%.
i = 15000000
Currently at 40%.
i = 19999999
Currently at 40%.
i = 20000000
Currently at 40%.
i = 20000001
Currently at 50%.
i = 24999999
Currently at 50%.
i = 25000000
Currently at 50%.
i = 25000001
Currently at 60%.
i = 29999999
Currently at 60%.
i = 30000000
Currently at 60%.
i = 30000001
Currently at 70%.
i = 34999998
Currently at 70%.
i = 34999999
Currently at 70%.
i = 35000000
Currently at 70%.
i = 35000001
Currently at 70%.
i = 35000002
Currently at 80%.
i = 39999998
Currently at 80%.
i = 39999999
Currently at 80%.
i = 40000000
Currently at 80%.
i = 40000001
Currently at 80%.
i = 40000002
Currently at 90%.
i = 44999998
Currently at 90%.
i = 44999999
Currently at 90%.
i = 45000000
Currently at 90%.
i = 45000001
Currently at 90%.
i = 45000002
Currently at 100%.
i = 49999998
Currently at 100%.
i = 49999999
Currently at 100%.
i = 50000000
我认为[这个链接](http://www.youtube.com/watch?v=PZRI1IfStY0&list= UU9-y-6csu5WGm29I7JiwpnA&feature = share&index = 7)将揭示这个问题。 – Makoto
这有助于很多!谢谢 – Programmer
可能重复的[是浮点数学破碎?](http://stackoverflow.com/questions/588004/is-floating-point-math-broken) –