可能重复:
Floating point inaccuracy examples
double arithmetic and equality in Java算术错误添加两个双值
我抓住了这个问题,而试图调试检查,如果两个值相等分拣程序。获得这些值只是在两个双变量上做一些加法:0.31 + 0.27。
当这种排序比较这两个与另一个对象的总和时,它们的总和也等于0.58,它告诉我比较是不相等的。看着第一个对象的总和,我看到它把它列为0.58000000000000007。想知道如果是我的代码什么的,我创建了一个简单的控制台应用程序来测试它:
static void Main(string[] args)
{
double val1 = .31;
double val2 = .27;
Console.WriteLine("Value 1: " + val1);
Console.WriteLine("Value 2: " + val2);
double added = val1 + val2;
if (!added.Equals(.58))
Console.WriteLine("Added value is not .58!");
else
Console.WriteLine("Added value is .58");
Console.WriteLine("Press any key to exit.");
Console.ReadLine();
}
运行它在我的机器上,这又是0.58000000000000007。我有一个同事做同样的事情,并提出了相同的输出。
有没有人遇到过这个?我们都在运行64位Windows 7,并且这是在C#中完成的 - 我还没有在其他场景中测试过它。
这是由于浮点类型的工作原因。使用'decimal'而不是double。 –
我相信这已经得到解答,但我找不到那个笨蛋。这是正确的行为。我建议你阅读[Goldberg的计算机科学家应该知道的关于浮点运算的知识](http://download.oracle.com/docs/cd/E19957-01/806-3568/ncg_goldberg.html)。 – user7116
太多重复。长话短说,不是bug。 –