2017-10-07 83 views
2

我有一個base36數00001CGUMZYCB99J如何從Base36轉換爲Base10在JS

但如果我嘗試它轉換成JavaScript和

parseInt("00001CGUMZYCB99J", 36); 

爲10進制我得到錯誤的結果一樣177207000002463650或177207000002463648。預期結果是177207000002463655.我發現兩個網站,無論如何得到的結果:translatorscafedcode

但我怎麼能在JS中做到這一點?

+0

這是一個準確性問題,但我不知道如何解決JavaScript中的問題。 – NieDzejkob

回答

0

該轉換的結果超出Number.MAX_SAFE_INTEGER(即以10爲底值過大,以適應在JavaScript整數),這意味着你需要某種形式的任意精度庫來進行轉換,比如biginteger

const BigInteger = require('biginteger').BigInteger; 

let value = BigInteger.parse('00001CGUMZYCB99J', 36); 

console.log(value.toString()) // 177207000002463655 
0

JavaScript將所有值存儲在double中。因此,大數字將有一些不太重要的數字發生變化。如果你想處理大量的數據,你必須使用一個特殊的庫,如this BigInteger one

如果你使用這個庫,你可以基地之間這樣的轉換:

BigInteger.parse("00001CGUMZYCB99J", 36); 

請記住,你需要使用該庫以保持,則無法將其轉換回一個正常的數字,或你將面臨同樣的問題。