我有一個base36數00001CGUMZYCB99J如何從Base36轉換爲Base10在JS
但如果我嘗試它轉換成JavaScript和
parseInt("00001CGUMZYCB99J", 36);
爲10進制我得到錯誤的結果一樣177207000002463650或177207000002463648。預期結果是177207000002463655.我發現兩個網站,無論如何得到的結果:translatorscafe和dcode。
但我怎麼能在JS中做到這一點?
我有一個base36數00001CGUMZYCB99J如何從Base36轉換爲Base10在JS
但如果我嘗試它轉換成JavaScript和
parseInt("00001CGUMZYCB99J", 36);
爲10進制我得到錯誤的結果一樣177207000002463650或177207000002463648。預期結果是177207000002463655.我發現兩個網站,無論如何得到的結果:translatorscafe和dcode。
但我怎麼能在JS中做到這一點?
該轉換的結果超出Number.MAX_SAFE_INTEGER
(即以10爲底值過大,以適應在JavaScript整數),這意味着你需要某種形式的任意精度庫來進行轉換,比如biginteger
:
const BigInteger = require('biginteger').BigInteger;
let value = BigInteger.parse('00001CGUMZYCB99J', 36);
console.log(value.toString()) // 177207000002463655
JavaScript將所有值存儲在double
中。因此,大數字將有一些不太重要的數字發生變化。如果你想處理大量的數據,你必須使用一個特殊的庫,如this BigInteger one。
如果你使用這個庫,你可以基地之間這樣的轉換:
BigInteger.parse("00001CGUMZYCB99J", 36);
請記住,你需要使用該庫以保持,則無法將其轉換回一個正常的數字,或你將面臨同樣的問題。
這是一個準確性問題,但我不知道如何解決JavaScript中的問題。 – NieDzejkob