我一直在用JavaScript体验一些有趣的事情,但我找不到原因,我很确定它是我自己,而不是JavaScript。通过执行(72058145430680163).toString(16)
将数字72058145430680163转换为十六进制时,我获得了数字10000806191b260。如果在https://www.rapidtables.com/convert/number/decimal-to-hex.html使用计算器,则显示为白色,则得到10000806191B263,这是正确的数字。
此外,将我的结果转换回int时,我不返回原始整数。parseInt((72058145430680163).toString(16), 16)
我获得72058145430680160。
我在做什么错?
您超出了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。因此,您看到的是一些溢出问题。您可以采取的措施来利用Javascript数据类型BigInt。
因此,实际上,您可以执行以下操作:
BigInt("72058145430680163").toString(16);