当我处理一些大数字时,如
取任意随机数3289568273632879456235
。
我在Chrome
或Firefox
console
中发现了这一点
3289568273632879456235 % 6 = 0
但在Python
shell中
3289568273632879456235 % 6 = 5
。
所以我不明白为什么会有不同的答案 任何人都可以向我解释。
答案 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使用不同的系统来处理整数,这里讨论