Decimal 与 Double


Console.WriteLine(66.235555555555555555555555555555555555555555555555d * 100);
Console.WriteLine(66.235555555555555555555555555555555555555555555555m * 100);

它们的结果是不同的,这是为什么?

Double
值类型表示一个值介于 -1.79769313486232e308 +1.79769313486232e308 之间的双精度 64 位数字,浮点数只能近似于十进制数字,浮点数的精度决定了浮点数近似于十进制数字的精确程度。默认情况下,Double 值的精度是 15 个十进制位,但内部维护的最大精度是 17 位。所以就出现了乘上一百后,精度就不够了。

因此,这之后就想到了应该用更高精度的 decimal 型。


注:
与浮点型相比,decimal 类型具有较高的精度,但取值范围较小。因此,从浮点型到 decimal 的转换可能会产生溢出异常,而从 decimal 到浮点型的转换则可能导致精度损失。由于这些原因,在浮点型和 decimal 之间不存在隐式转换,如果没有显式地标出强制转换,就不可能在同一表达式中同时使用浮点操作数和 decimal 操作数。
原文地址:https://www.cnblogs.com/zhaoguan_wang/p/1146933.html