我不理解十进制和双精度的铸造规则.
这样做是合法的
decimal dec = 10;
double doub = (double) dec;
Run Code Online (Sandbox Code Playgroud)
然而令我困惑的是,十进制是一个16字节的数据类型,double是8个字节,因此不会将一个双倍的十进制数转换为加宽的对话,因此应该隐式允许; 以上例子不允许?
Jon*_*eet 36
如果转换double为decimal,则可能会丢失信息 - 数字可能完全超出范围,因为a的范围double远大于a的范围decimal.
如果转换decimal为double,则可能会丢失信息 - 例如,0.1可以完全表示decimal但不能表示double,并且decimal实际上使用的位数比精度高得多double.
隐式转换不应该丢失信息(转换long为double可能,但这是一个不同的参数).如果您要丢失信息,您应该通过显式转换告诉编译器您已经知道这一点.
这就是为什么没有隐式转换的原因.
| 归档时间: |
|
| 查看次数: |
9248 次 |
| 最近记录: |