2

将小数转换为双精度时,有时会出现一些意外的截断。例如:

        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

那么为什么在第一个示例中会截断双精度值呢?

4

1 回答 1

3

Decimal 和 double 以不同的精度以不同的方式存储......请参见此处 - .NET 中的 decimal、float 和 double 之间的区别?

于 2012-11-21T22:23:30.050 回答