86.25 - 86.24 = 0.01
一般来说,我认为上述陈述是对的吗?
但是,如果我输入
double a = 86.24;
double b = 86.25;
double c = b - a;
我发现c = 0.010000000000005116
为什么会这样?
答案 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。主要原因在于如何双重存储数字 - 它本质上是十进制数的二进制近似值。