将字符串转换为base36语言之间的不一致.

6 javascript python base36

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

Python方法:

>>> print int('abcdefghijr', 36)
Run Code Online (Sandbox Code Playgroud)

结果:37713647386641447

Javascript方法:

<script>
    document.write(parseInt("abcdefghijr", 36));
</script>
Run Code Online (Sandbox Code Playgroud)

结果:37713647386641450

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

谢谢.

小智 9

该数字需要56位来表示.JavaScript的数字实际上是双精度二进制浮点数,或double简称.这些总共是64位,并且可以表示比64位整数更宽范围的值,但由于它们如何实现(它们代表数字mantissa * 2^exponent),它们不能代表该范围内的所有数字,只是那些是2^exponent多重拟合尾数的倍数(包括2 ^ 0 = 1,因此你得到尾数可以直接处理的所有整数).尾数是53位,不足以满足这个数字.因此它会四舍五入到可以表示的数字.

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