My Life My Dream!

守信 求实 好学 力行
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Decimal 与 Double

Posted on 2008-04-10 15:46  召冠  阅读(721)  评论(0编辑  收藏  举报


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 操作数。