当我处理一些像
取任意随机数3289568273632879456235
。
我发现在Chrome
或Firefox
console
3289568273632879456235 % 6 = 0
但在Python
外壳中
3289568273632879456235 % 6 = 5
。
之后,我发现Python的答案是正确的。
所以我不明白为什么会有不同的答案。
有人可以向我解释。
最佳答案
这是因为javascript没有整数的概念,只有数字(以IEEE浮点数存储)。浮点数的精度是有限的,如果您尝试使数字超出浮点数可以表示的精确度,它将被“截断”-这正是您的大数正在发生的情况。考虑python“等效”:
>>> int(float(3289568273632879456235)) % 6
0L
这里有一些有趣的花絮,希望可以使观点更加清楚:
>>> int(float(3289568273632879456235)) # Notice, the different result due to loss of precision.
3289568273632879706112L
>>> int(float(3289568273632879456235)) == int(float(3289568273632879456236)) # different numbers, same result due to "truncation"
True