【发布时间】:2013-08-02 05:46:19
【问题描述】:
在 C# 中乘以十进制值时,我注意到一个奇怪的行为。考虑以下乘法运算:
1.1111111111111111111111111111m * 1m = 1.1111111111111111111111111111 // OK
1.1111111111111111111111111111m * 2m = 2.2222222222222222222222222222 // OK
1.1111111111111111111111111111m * 3m = 3.3333333333333333333333333333 // OK
1.1111111111111111111111111111m * 4m = 4.4444444444444444444444444444 // OK
1.1111111111111111111111111111m * 5m = 5.5555555555555555555555555555 // OK
1.1111111111111111111111111111m * 6m = 6.6666666666666666666666666666 // OK
1.1111111111111111111111111111m * 7m = 7.7777777777777777777777777777 // OK
1.1111111111111111111111111111m * 8m = 8.888888888888888888888888889 // Why not 8.8888888888888888888888888888 ?
1.1111111111111111111111111111m * 9m = 10.000000000000000000000000000 // Why not 9.9999999999999999999999999999 ?
我无法理解的是上述最后两个案例。这怎么可能?
【问题讨论】:
-
欢迎来到精确误差的奇妙世界。
-
这不是精度错误,只是四舍五入。
-
这是一个数学难题:
10 / 9 = 1.111…;1.111… * 9 = 9.999… ≠ 10。 ;)
标签: c# decimal multiplication