我正在做一个c#程序..我必须做一个简单的数学运算。
72057594037927936.0 - 255.0 = .....
这两个数字都是双倍的......我获得了
72057594037927680.0
而不是
72057594037927681.0
任何人都可以解释一下,请问怎么可能?
感谢名单
答案 0 :(得分:16)
减法的确切结果,
72057594037927681 = 0xffffffffffff01
需要56位精度,但double
只有53位,因此结果四舍五入到最接近的可表示数字。
答案 1 :(得分:6)
因为浮点数的精度有限。从大数字中添加/减去一个小数字可能会导致舍入错误。
如果您将代码转换为使用decimal
代替(更精确但范围更小),您将得到您期望的答案:
// using doubles
72057594037927936.0 - 255.0 // 72057594037927680.0
// using decimals
72057594037927936.0m - 255.0m // 72057594037927681.0m