隐式十进制转换为double或double转换为十进制

时间:2013-08-11 09:32:16

标签: c#

Double Precision是: 15-16 位。

十进制精度为: 28-29 有效数字。

所以我们可以隐式地将十进制转换为double。但请考虑以下代码:

double x = 100.3;
decimal y = 10.2;
 x = y;
 y = x;

x=yy=x两者都有编译时错误。

为什么我们不能隐式地将十进制转换为double或double转换为十进制?

请阅读:加倍到十进制,十进制加倍

2 个答案:

答案 0 :(得分:2)

这两种类型之间的想法完全不同。 请参阅Eric Lippert的blog

修改

博客引用: “由于范围差异,不能有从双精度到十进制的隐式转换;大量的双精度数大于最大可能的小数,因此隐式转换要么必须抛出,要么默默地丢失可能的数量级,两者都是不可接受的。可能存在从十进制到双精度的隐式转换,因为这只会失去精度而不是精度。“

答案 1 :(得分:0)

因为尽管decimal的精度更高,但双精度范围更大。

double-1.79769313486232E+308转到1.79769313486232E+308。同时,decimal-79228162514264337593543950335转到79228162514264337593543950335。存在巨大差异。但是,您通常不希望从decimal转换为double,因为当您使用decimal时通常不希望丢失精度(因为它们通常用于银行业务) ,需要准确)。