我注意到在将字符串转换为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-math或Big.js.如果你知道你的学校算术,这些数字并不难实现.有效地做到这一点是另一回事,也是一个广泛研究的领域.如果您使用现有的库,那不是您的问题.
| 归档时间: |
|
| 查看次数: |
554 次 |
| 最近记录: |