所以我有一个简单的for循环:
double bg = 5.0;
double f = 0.0;
for(double i = 0; i <= bg; i += 1)
{
f = f + ((2 * i + 1)*0.1);
if(i == bg)
{
System.out.printf ("%.1f" , f);
}
}
Run Code Online (Sandbox Code Playgroud)
当我为每次增加1增加时,它工作正常.但是,当我做+ + = 0.1时,它不会打印f.有什么想法吗?
你无法比较那样的花车.
通常使用类似的东西检查两个浮点数(双精度数)的相等性
if(Math.abs(i - bg)<0.00001f)//0.00001f是非常小的值 - 几乎为零,选择此值以满足您的需要
有关更多信息,请访问http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm
你的代码应该是这样的
double bg = 5.0;
double f = 0.0;
for(double i = 0; i <= bg; i += 1)
{
f = f + ((2 * i + 1)*0.1);
if (Math.abs(i - bg) < 0.00001f)
{
System.out.printf ("%.1f" , f);
}
}
Run Code Online (Sandbox Code Playgroud)