c#中100.02-100为什么不等于0.02?数据类型为:Double或Float为什么都不为0.02?

来源:百度知道 编辑:UC知道 时间:2024/05/28 08:28:35
c#中100.02-100为什么不等于0.02?数据类型为:Double或Float为什么都不为0.02?

由于浮点数的特性, double或float均存在舍入误差,所以会出现100.02-100=0.0199999之类的情况。
要想使用精确的数字,请使用decimal类型。它是专门为财务等要求精确计算的应用设定的。
100.02M-100M一定等于0.02M,试一试吧。

double a = 100.02;
double b = 100;
double c;
c =a - b;
Console.WriteLine("{0}", double.Parse(c.ToString("0.00")));
Console.ReadKey();
调试通过。。。

double a = 100.02;
double b = 100;
double c;
c =a - b;
Console.WriteLine("{0}", c);

同意cmbird的答案,就是舍入误差的原因,因为0.02无法精确转换为精确的二进制。所以在不允许舍入误差的金融领域里面是不允许使用double的一般都用decimal

Decimal 值类型表示从正 79,228,162,514,264,337,593,543,950,335 到负 79,228,162,514,264,337,593,543,950,335 之间的十进制数。Decimal 值类型适用于要求使用大量有效的整数及小数位数并且没有舍入错误的财务计算。