Как конвертировать из Base36 в Base10 в JS

У меня есть base36 номер 00001CGUMZYCB99J

Но если я попытаюсь преобразовать его в JavaScript на базовый 10 с помощью

parseInt("00001CGUMZYCB99J", 36);

Я получаю неправильные результаты, например 177207000002463650 или 177207000002463648. Ожидаемый результат: 177207000002463655. Я нашел два веб-сайта, которые в любом случае получают результат: translatorscafe и dcode.

Но как я могу сделать это в JS?

+2
источник поделиться
2 ответа

Результат этого преобразования превышает Number.MAX_SAFE_INTEGER (т.е. значение base-10 слишком велико, чтобы соответствовать целому числу JavaScript), что означает, что для преобразования требуется какая-то библиотека произвольной точности, например biginteger:

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

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

console.log( value.toString() ) // 177207000002463655
0
источник

JavaScript сохраняет все значения в double. Поэтому большие числа будут иметь некоторые из менее значимых цифр. Если вы хотите иметь дело с большими числами, вам нужно использовать специальную библиотеку, такую как BigInteger.

Если вы используете эту библиотеку, вы можете конвертировать между такими базами:

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

Имейте в виду, что вам нужно продолжать пользоваться библиотекой, вы не можете преобразовать ее в нормальное число, или вы столкнетесь с той же проблемой.

0
источник

Посмотрите другие вопросы по меткам или Задайте вопрос