将小数转换为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值?
答案 0 :(得分:3)
十进制和双精度存储方式不同,准确度不同...请参阅此处 - Difference between decimal, float and double in .NET?