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