I am currently writing a piece of JavaScript that uses base 36 encoding.
I came across this problem:
parseInt("welcomeback",36).toString(36)
Appears to return "welcomebacg"
.
I tested this in the Chrome developer's console and Node.js with the same result.
Is there any logical explanation for this result?
The result of parseInt("welcomeback",36)
is larger than Number.MAX_SAFE_INTEGER
(253-1) and thus cannot be accurately represented. A possible workaround is to perform base conversion with BigInt
manually.
const str = "welcomeback";
const base = 36;
const res = [...str].reduce((acc,curr)=>
BigInt(parseInt(curr, base)) + BigInt(base) * acc, 0n);
console.log(res.toString());
console.log(res.toString(36));