2012-10-17 67 views
6

我注意到在將字符串轉換爲base36時,Python和JavaScript之間存在一些不一致之處。將字符串轉換爲語言之間的base36不一致性。

Python的方法:

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

結果:37713647386641447

JavaScript方法:

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

結果:37713647386641450

什麼導致兩種語言之間的不同結果?無論語言如何產生相同結果,最好的方法是什麼?

謝謝。

+4

請參閱http://stackoverflow.com/questions/5812096/javascript-large-integer-round-because-precision-why; javascript沒有像Python那樣的大整數的任意精度。 (只需在javascript控制檯中鍵入'37713647386641447'會給你相同的取整值) – geoffspear

回答

10

該數字需要56位來表示。 JavaScript的數字實際上是double-precision binary floating point numbers或簡稱爲double。它們總共是64位,並且可以代表比64位整數更寬的範圍,但是由於它們如何實現(它們表示數字爲mantissa * 2^exponent),所以它們不能代表全部數字在該範圍內,只是那些倍數爲2^exponent的倍數(其中包括2^0 = 1,因此您得到所有整數,尾數可以直接處理)。尾數是53位,這對於這個數字是不夠的。所以它被四捨五入爲可以代表的數字。

你可以做的是使用由第三方庫定義的任意精度數字類型,如gwt-mathBig.js。如果你知道你的學校算術,這些數字並不難實現。有效地做這件事是另一回事,也是一個廣泛研究的領域。而不是你的問題,如果你使用現有的庫。

+0

很好的解釋。謝謝。 –

相關問題