【发布时间】:2013-10-26 12:57:45
【问题描述】:
我注意到在添加两个双打时出现了一些奇怪的行为,有时它可以正常工作,有时不能!
这是第一个例子:
double num1 = 0.1 + 0.7; //Guess the result?
简单 - 0.8 !!!还是不行?
看看奇怪的结果:
你猜怎么着,if 语句进入 else 块,并打印 num1 - 不,它不打印 0.7999999999999993,它打印 0.8。
所以我又向前迈了一步,尝试了这段代码:
if (0.1 + 0.7 == 0.8) //Returns false ??
{
Console.WriteLine("Correct");
}
好的,奇怪,但现在我找到了正确的方法,它应该使用 f (float)。我记得 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");
}
调试时的watch结果:
有人可以解释一下这里出了什么问题吗?是bug吗?
提前致谢。
【问题讨论】:
-
@MichaC 提问的方式完全不同,也不一样。
-
当然,你在这个问题上付出了更多的努力,但最后,还是一样的。只是因为 C# 中的浮点运算并不精确。已经在这个网站上回答了 1000 次 ^^
标签: c# math console-application