![](/img/trans.png)
[英]Why float is bigger than double after computing same value? Why float can't be implicitly converted to Decimal
[英]Why can't Double be implicitly cast to Decimal
当涉及到十进制和双精度时,我不明白转换规则。
这样做是合法的
decimal dec = 10;
double doub = (double) dec;
然而让我困惑的是,decimal 是一个 16 字节的数据类型,double 是 8 个字节,所以不会将 double 转换为十进制扩展对话,因此应该隐式允许; 上面的例子不允许?
double doub = 3.2;
decimal dec = doub; // CS0029: Cannot implicitly convert type 'double' to 'decimal'
如果从double
转换为decimal
,则可能会丢失信息 - 数字可能完全超出范围,因为double
的范围远大于decimal
的范围。
如果您从decimal
转换为double
,您可能会丢失信息 - 例如, 0.1 可以精确地表示为decimal
而不是double
,并且decimal
实际上比double
使用更多的精度位。
隐式转换不应该丢失信息(从long
到double
的转换可能会丢失,但这是一个不同的论点)。 如果您要丢失信息,则必须通过显式转换告诉编译器您知道这一点。
这就是为什么没有任何隐式转换的原因。
十进制更精确,因此您会丢失信息。 这就是为什么你只能明确地做到这一点。 这是为了保护您免于丢失信息。 见 MSDN
http://msdn.microsoft.com/en-us/library/678hzkk9%28v=VS.100%29.aspx
您可以在两个方向显式转换:从double
到decimal
和从decimal
到double
。
出于一个很好的理由,您不能在任一方向进行隐式转换:转换可能不是无损的。
例如,十进制数 1234567890123456789 不能完全表示为双精度数。 同样,双数10^32
不能准确地表示为十进制数。
为避免无意中丢失信息,不允许进行隐式转换。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.