我使用小数类型进行高精度计算(货币)。
但我今天遇到了这个简单的划分:
1 / (1 / 37)这应该再次得到 37
http://www.wolframalpha.com/input/?i=1%2F+%281%2F37%29
但 C# 给了我:
37.000000000000000000000000037M
我尝试了这两个:
1m/(1m/37m);
和
Decimal.Divide(1, Decimal.Divide(1, 37))
但两者产生相同的结果。这种行为如何解释?
Decimal将值存储为精度有限的十进制浮点数。1 / 37 的结果未精确存储,因为它存储为 0.027027027027027027027027027M。真实数字的十进制表示形式为无限组 027。因此,您无法获得每个可能数字的十进制表示形式的精确数字。
如果您Double在相同的计算中使用,则在这种情况下最终结果是正确的(但这并不意味着它总是更好)。
关于这个主题的一个很好的答案是:Difference betweendecimal, float and double in .NET?
| 归档时间: |
|
| 查看次数: |
2487 次 |
| 最近记录: |