将小数转换为double时出现意外截断

时间:2012-11-21 22:21:20

标签: c# double type-conversion decimal

将小数转换为double时,有时会出现意外截断。 例如:

        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

请注意,实际工作的第二个示例的小数位数多于第一个小数位。此外,使用这个复杂的代码可以将第一个值成功转换为double:

        dbl = Convert.ToDouble(dec.ToString()); // dbl = -96.31614743511301, expected

那么为什么在第一个例子中截断了double值?

1 个答案:

答案 0 :(得分:3)

十进制和双精度存储方式不同,准确度不同...请参阅此处 - Difference between decimal, float and double in .NET?