为什么这两个双打的简单计算不准确?

时间:2010-11-23 04:59:03

标签: c# double precision

  

可能重复:
  C# (4): double minus double giving precision problems

86.25 - 86.24 = 0.01

一般来说,我认为上述陈述是对的吗?

但是,如果我输入

        double a = 86.24;
        double b = 86.25;
        double c = b - a;

我发现c = 0.010000000000005116

为什么会这样?

2 个答案:

答案 0 :(得分:7)

浮点数(在这种情况下为双精度数)不能完全表示十进制值。我建议阅读David Goldberg的What every computer scientist should know about floating-point arithmetic

这适用于处理浮点数的所有语言,无论是C#,Java,JavaScript,......对于任何使用浮点运算的开发人员来说,这都是必不可少的读物。

正如VinayC建议的那样,如果你需要一个精确(和较慢)的表示,请使用System.Decimal(在C#中称为decimal)。

答案 1 :(得分:1)

Double是十进制计算的错误数据类型,请使用Decimal。主要原因在于如何双重存储数字 - 它本质上是十进制数的二进制近似值。