6

在将字符串转换为 base36 时,我注意到 Python 和 JavaScript 之间存在一些不一致。

蟒蛇方法:

>>> print int('abcdefghijr', 36)

结果:37713647386641447

Javascript方法:

<script>
    document.write(parseInt("abcdefghijr", 36));
</script>

结果:37713647386641450

是什么导致两种语言之间的结果不同?无论语言如何,产生相同结果的最佳方法是什么?

谢谢你。

4

1 回答 1

10

该数字需要 56 位来表示。JavaScript 的数字实际上是双精度二进制浮点数,或者double简称。它们总共是 64 位,并且可以表示比 64 位整数更广泛的值范围,但是由于它们是如何实现的(它们将数字表示为mantissa * 2^exponent),它们不能表示该范围内的所有数字,只是那些是2^exponent倍数适合尾数的倍数(包括 2^0 = 1,因此您可以获得尾数可以直接处理的所有整数)。尾数是 53 位,对于这个数字来说是不够的。所以它被四舍五入为一个可以表示的数字。

您可以做的是使用由第三方库(如gwt-mathor )定义的任意精度数字类型Big.js。如果你知道你的学校算术,这些数字并不难实现。有效地做到这一点是另一回事,但也是一个广泛研究的领域。如果您使用现有的库,这不是您的问题。

于 2012-10-17T13:55:45.600 回答