3289568273632879456235

3289568273632879456235

当我处理一些像
取任意随机数3289568273632879456235

我发现在ChromeFirefox 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

10-07 16:41