序言
我在使用 JavaScript 时遇到了一些有趣的事情,但我找不到原因。 我很确定是我的问题,而不是 JavaScript。
问题
将整数72058145430680163
(18位数字)转换为十六进制时,我获得了十六进制表示形式10000806191b260
。
尽管使用 Dec2Hex converter RapidTables我得到10000806191b263
。后者是正确的数字 - 比我使用 Javascript 得到的结果多 3 个。
此外,当我的结果转换回 int 时,它确实返回 72058145430680160
- 比我的原始源整数少 3。
用于转换的Javascript
从十进制转换为十六进制:
(72058145430680163).toString(16);
从十六进制转换为十进制(向后):
parseInt((72058145430680163).toString(16), 16)
我做错了什么?
最佳答案
您超出了 JavaScript 的最大限制。请改用 BigInt。
BigInt("72058145430680163").toString('16'); // Returns 10000806191b263 as String
这完成了整个往返
BigInt("0x" + BigInt("72058145430680163").toString('16')).toString() // Retuns 72058145430680163
有关 BigInt 的更多信息,请参见此处: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt
关于JavaScript 将长十进制转换为十六进制并返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59165088/