JavaScript: parseInt(string, 36) преобразует разные строки в одно и то же число

У меня проблема с преобразованием строк:

При использовании parseInt(string[,radix]) вот так:

BigInt(parseInt('something', 36))

он выводит: 80920602611116n. с другим вводом, например:

BigInt(parseInt('somethink', 36))

он выводит: 80920602611120n, что, конечно, другое.

Однако, если это более длинная строка, выходной номер иногда одинаков:

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

это выведет 1867697451648055638757226289961051507749359223570432n для обоих, хотя они разные.

Я знаю, что есть ограничение на безопасное представление целых чисел, поэтому я использовал BigInt, у которого нет ограничений.

Я должен иметь возможность различать строки такого размера, используя BigInt для их представления.


person Nils Schwebel    schedule 20.04.2020    source источник
comment
parseInt теряет точность перед BigInt   -  person Gavin    schedule 20.04.2020
comment
По какой-то причине тип Javascript BigInt относительно несовершенен по сравнению с любым другим типом bigint в мире.   -  person President James K. Polk    schedule 20.04.2020


Ответы (1)


См. кодирование большого целого числа в base62, но замените следующее основание 62 цифры...

var digits = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

...с основанием 36 цифр...

var digits = '0123456789abcdefghijklmnopqrstuvwxyz';

Надеюсь это поможет...

person Trentium    schedule 18.05.2020