JavaScript和Python在大数下的除法或取模运算结果不同

1 投票
2 回答
981 浏览
提问于 2025-04-18 05:56

我在处理一些很大的数字时,比如说,
随便拿一个数字 3289568273632879456235

我发现,在 ChromeFirefoxconsole 中,
3289568273632879456235 % 6 = 0
但是在 Python 的命令行中,
3289568273632879456235 % 6 = 5

之后我发现,Python 的答案是正确的。

所以我不明白为什么会有不同的答案。
有人能给我解释一下吗?

2 个回答

2

JavaScript使用的是IEEE浮点数学,这种数学在处理数字时有一些限制。

这里有个比较详细的讨论:

而Python则使用了不同的方式来处理整数,这里有相关的讨论:

4

这是因为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

撰写回答