【问题标题】:How to convert from Base36 to Base10 in JS如何在 JS 中从 Base36 转换为 Base 10
【发布时间】:2018-03-19 03:00:27
【问题描述】:

我有一个 base36 数字 00001CGUMZYCB99J

但如果我尝试在 JavaScript 中将其转换为以 10 为底的

parseInt("00001CGUMZYCB99J", 36);

我得到了错误的结果,例如 177207000002463650 或 177207000002463648。预期的结果是 177207000002463655。我发现两个网站都得到了正确的结果:translatorscafedcode

但是我如何在 JS 中做到这一点?

【问题讨论】:

  • 这是一个准确性问题,但我不知道如何在 JavaScript 中解决。

标签: javascript base


【解决方案1】:

该转换的结果超过了Number.MAX_SAFE_INTEGER(即以 10 为底的值太大而无法放入 JavaScript 整数),这意味着您需要某种任意精度的库来进行转换,例如 biginteger

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

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

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

【讨论】:

    【解决方案2】:

    JavaScript 将所有值存储在 double 中。因此,大数字将改变一些不太重要的数字。如果你想处理大数,你必须使用像this BigInteger one这样的特殊库。

    如果你使用这个库,你可以像这样在基础之间进行转换:

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

    请记住,您需要继续使用该库,不能将其转换回普通数字,否则您将面临同样的问题。

    【讨论】:

      猜你喜欢
      • 2022-10-23
      • 2022-01-07
      • 1970-01-01
      • 2011-01-24
      • 2012-03-22
      • 1970-01-01
      • 1970-01-01
      • 2016-10-12
      • 1970-01-01
      相关资源
      最近更新 更多