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`在其整个范围内,其精度完全不变。