Double Precision是: 15-16 位。
十进制精度为: 28-29 有效数字。
所以我们可以隐式地将十进制转换为double。但请考虑以下代码:
double x = 100.3;
decimal y = 10.2;
x = y;
y = x;
x=y
和y=x
两者都有编译时错误。
为什么我们不能隐式地将十进制转换为double或double转换为十进制?
请阅读:加倍到十进制,十进制加倍
答案 0 :(得分:2)
这两种类型之间的想法完全不同。 请参阅Eric Lippert的blog。
修改强>
博客引用: “由于范围差异,不能有从双精度到十进制的隐式转换;大量的双精度数大于最大可能的小数,因此隐式转换要么必须抛出,要么默默地丢失可能的数量级,两者都是不可接受的。可能存在从十进制到双精度的隐式转换,因为这只会失去精度而不是精度。“
答案 1 :(得分:0)
因为尽管decimal
的精度更高,但双精度范围更大。
double
从-1.79769313486232E+308
转到1.79769313486232E+308
。同时,decimal
从-79228162514264337593543950335
转到79228162514264337593543950335
。存在巨大差异。但是,您通常不希望从decimal
转换为double
,因为当您使用decimal
时通常不希望丢失精度(因为它们通常用于银行业务) ,需要准确)。