2017-10-07 49 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); 

请记住,你需要使用该库以保持,则无法将其转换回一个正常的数字,或你将面临同样的问题。