javascript和python中的不同答案与大数字 - 分区或mod运算符

时间:2014-05-09 04:55:06

标签: javascript python google-chrome firefox largenumber

当我处理一些大数字时,如 取任意随机数3289568273632879456235

我在ChromeFirefox console中发现了这一点   3289568273632879456235 % 6 = 0
但在Python shell中  3289568273632879456235 % 6 = 5

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

所以我不明白为什么会有不同的答案 任何人都可以向我解释。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

JavaScript使用IEEE浮点数学,它可以处理的数量有限。

这里有一个长篇讨论:

另一方面,Python使用不同的系统来处理整数,这里讨论