将小数转换为双精度时,有时会出现一些意外的截断。例如:
decimal dec = -96.31614743511301m;
double dbl = Convert.ToDouble(dec); // dbl = -96.316147435113, why?
对于其他值,它按预期工作:
decimal dec2 = -96.269592225955307m;
double dbl2 = Convert.ToDouble(dec2); // dbl2 = -96.269592225955307, expected
请注意,第二个有效的示例实际上比第一个无效的示例具有更多的小数位。此外,第一个值可以使用以下复杂代码成功转换为双精度值:
dbl = Convert.ToDouble(dec.ToString()); // dbl = -96.31614743511301, expected
那么为什么在第一个示例中会截断双精度值呢?