【问题标题】:JavaScript: parseInt(string, 36) converts different strings to same numberJavaScript:parseInt(string, 36) 将不同的字符串转换为相同的数字
【发布时间】:2020-08-03 04:33:46
【问题描述】:

我遇到了字符串转换问题:

当像这样使用parseInt(string[,radix]) 时:

BigInt(parseInt('something', 36))

它输出:80920602611116n。像这样使用不同的输入:

BigInt(parseInt('somethink', 36))

它输出:80920602611120n,这当然是另外一回事。

但是如果是较长的字符串,有时输出的数字是一样的:

BigInt(parseInt('thisisactuallyadifferentsomething', 36))
BigInt(parseInt('thisisactuallyadifferentsomethink', 36))

这将为两者输出1867697451648055638757226289961051507749359223570432n,尽管它们是不同的。

我知道,整数的安全表示是有限制的,这就是我使用 BigInt 的原因,它没有限制。

我必须能够区分这种大小的字符串,同时使用 BigInt 来表示这些字符串。

【问题讨论】:

  • parseInt 在 BigInt 之前失去精度
  • 由于某种原因,与世界上所有其他 bigint 类型相比,Javascript BigInt 类型相对残废。

标签: javascript parseint bigint string-conversion base36


【解决方案1】:

参见encode a big integer to base62,但替换以下基数 62 位...

var digits = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

...以 36 位为基数...

var digits = '0123456789abcdefghijklmnopqrstuvwxyz';

希望这会有所帮助...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-28
    • 1970-01-01
    • 2020-11-22
    • 1970-01-01
    • 1970-01-01
    • 2021-05-14
    相关资源
    最近更新 更多