我注意到在将字符串转换为base36时,Python和JavaScript之间存在一些不一致。
Python方法:
>>> print int('abcdefghijr', 36)
结果:37713647386641447
Javascript方法:
<script>
document.write(parseInt("abcdefghijr", 36));
</script>
结果:37713647386641450
导致两种语言之间的不同结果的原因是什么?无论语言如何,产生相同结果的最佳方法是什么?
谢谢。
答案 0 :(得分:10)
该数字需要56位来表示。 JavaScript的数字实际上是double-precision binary floating point numbers,或简称double
。它们总共是64位,并且可以表示比64位整数更宽的范围,但由于它们如何实现(它们代表一个数字mantissa * 2^exponent
),它们不能代表该范围内的所有数字,只是2^exponent
倍数的数字,其中多重符合尾数(包括2 ^ 0 = 1,所以你得到所有整数尾数可以直接处理)。尾数是53位,不足以满足这个数字。因此它会四舍五入到可以表示的数字。
您可以使用由gwt-math
或Big.js
等第三方库定义的任意精确数字类型。如果你知道你的学校算术,这些数字并不难实现。有效地做到这一点是另一回事,也是一个广泛研究的领域。如果您使用现有的库,请不要您的问题。