我试图将“ 12345678.12345678”转换为双精度,但是Double.Parse将其更改为12345678.123457。当我使用十进制而不是双精度时,情况也是如此

   decimal check = Decimal.Parse("12345678.12345678", NumberStyles.AllowDecimalPoint);//returns 12345678.123457
    double check1 = (Double)check; //returns 12345678.123457

最佳答案

具有双精度值的浮点算法固有地具有有限的精度。双精度值中只有15-16位有效的十进制数字信息。您看到的行为是完全可以预期的。

12345678.12345678的closest representable double precision value是12345678.1234567798674106597900390625,与您观察到的行为一致。

10-04 14:24