C# 为什么这两倍的简单计算不准确?

C# 为什么这两倍的简单计算不准确?,c#,double,precision,C#,Double,Precision,可能重复: 86.25-86.24=0.01 一般来说,我认为上述说法是正确的,对吗 但是,如果我输入这个 double a = 86.24; double b = 86.25; double c = b - a; 我发现c=0.010000000000005116 这是为什么?对于十进制计算,Double是不正确的数据类型,请使用decimal。主要原因在于double如何存储数字——它本质上是十进制数的二进制近似值 浮点数(在本例中为双精度

可能重复:

86.25-86.24=0.01

一般来说,我认为上述说法是正确的,对吗

但是,如果我输入这个

        double a = 86.24;
        double b = 86.25;
        double c = b - a;
我发现c=0.010000000000005116


这是为什么?

对于十进制计算,Double是不正确的数据类型,请使用decimal。主要原因在于double如何存储数字——它本质上是十进制数的二进制近似值

浮点数(在本例中为双精度)不能准确表示十进制值。我建议你读大卫·戈德伯格的

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


正如VinayC所建议的,如果你需要一个精确的(并且更慢的)表示法,可以使用
System.Decimal
(在C#中又称
Decimal
)。

我想知道它为什么会出现,比如它在幕后发生了什么?因为你提到了各种编程语言,我必须指出,Ada在允许您指定所需的实数精度方面是独一无二的(例如,类型幸福是数字7范围0.0..1.0
),并且在允许固定精度实数值方面也是独一无二的,例如
类型指南针\u方向是delta 0.1 0。。359.9`在其整个范围内,其精度完全不变。