我注意到一些奇怪的行为,同时添加两个双打,有时它工作正确,有时不是!C#为一个简单的数学运算获得奇怪的结果
这是第一个例子:
double num1 = 0.1 + 0.7; //Guess the result?
容易 - 0.8!或不?
看看奇怪的结果:
你猜怎么着,if语句的else块里面去,并打印num1
- 不,它不打印0.799999999999993,它打印0.8。
所以我一直向前走了一步,并试图将此代码:
if (0.1 + 0.7 == 0.8) //Returns false ??
{
Console.WriteLine("Correct");
}
OK,奇怪的,但现在我找到了正确的方法,就应该使用F(浮动)。正如我记得double有很多空格,所以它可以包含更多的数字,也许这是原因。
float num2 = 0.1f + 0.7f;
if (num2 == 0.8f) //Perfect - finally works !!!
{
Console.WriteLine("Correct");
}
else
{
Console.WriteLine(num2);
}
但是现在,我试试这个 - 并且它又返回false,为什么?
if (0.1f + 0.7f == 0.8f) //Returns false :(
{
Console.WriteLine("Correct");
}
手表结果调试它的时候:
谁能给我解释一下什么是错在这里?那些错误?
在此先感谢。
的可能重复(http://stackoverflow.com/questions/753948/why-is-floating-point-arithmetic-in-c-sharp-imprecise) – MichaC
@MichaC提问的方式完全不同,也不一样。 –
因为你在这个问题上付出了很多努力,但最终它是一回事。这仅仅是因为C#中的浮点运算不精确。在这个网站上已经回答了1000次^^ – MichaC