将小数转换为双精度时,有时会出现一些意外的截断。
例如:
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
那么为什么在第一个示例中双精度值被截断呢?
最佳答案
小数和双精度以不同的精度不同地存储...请参见此处-Difference between decimal, float and double in .NET?