我不理解十进制和双精度的铸造规则.
这样做是合法的
decimal dec = 10;
double doub = (double) dec;
Run Code Online (Sandbox Code Playgroud)
然而令我困惑的是,十进制是一个16字节的数据类型,double是8个字节,因此不会将一个双倍的十进制数转换为加宽的对话,因此应该隐式允许; 以上例子不允许?
当从一个双精度变为十进制时,假设我double 可以表示为decimal...
它是更合适的投双为十进制:
(显式数值转换表)(请注意,此项错误地违背了前者!)
double foo = bar;
decimal foobar = (decimal)foo;
Run Code Online (Sandbox Code Playgroud)
或者更适合调用decimal构造函数:
(Decimal Constructor)
double foo = bar;
decimal foobar = new decimal(foo);
Run Code Online (Sandbox Code Playgroud)
我倾向于使用decimal构造函数,但我想知道使用一个与另一个的原因.
从我可以告诉我唯一的区别是,下面的双重显式转换Decimal.MinValue返回零,而使用构造函数抛出一个OverflowException
编辑: @Joren在下面的评论中指出,演员OverflowException也会抛出一个小值...所以显然MSDN文档是不正确的.
相关问题:
- C#将双变量强制转换为十进制
- 安全地自动从双精度转换为十进制:以下是否安全?