我一直在用JavaScript体验一些有趣的东西,但我找不到原因。我很确定它是我自己,而不是JavaScript。
[将整数72058145430680163
(18位数字)转换为十六进制时,我获得了十六进制表示形式10000806191b260
。
尽管使用Dec2Hex converter RapidTables,但我得到了10000806191b263
。后一个是正确的数字-比使用Javascript的结果多3个。
而且,将我的结果转换为back to int时,它确实返回72058145430680160
-比我的原始源整数小3。
从dec转换为十六进制:
(72058145430680163).toString(16);
[从十六进制转换为dec(向后):
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。因此,您看到的是一些溢出问题。您可以采取的措施来利用Javascript数据类型BigInt。
因此,实际上,您可以执行以下操作:
BigInt("72058145430680163").toString(16);