javascript - JavaScript将长十进制转换为十六进制并返回
问题描述
序言
我在使用 JavaScript 时遇到了一些有趣的事情,但我找不到原因。我很确定是我自己而不是 JavaScript。
问题
将整数72058145430680163
(18 位)转换为 hex时,我获得了 hexadecimal representation 10000806191b260
。
虽然使用Dec2Hex 转换器 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
推荐阅读
- java - Spring Boot ArrayList 验证
- .net - IPublicClientApplication.GetAccountsAsync() 仅返回空数组
- python - Matplotlib 图形数据
- upgrade - 2sxc 2scx 支持的 DNN 版本是什么。它是否支持 DNN Evoq 9.6+?
- python - Discord.py 静音命令错误 AttributeError
- r - 有没有办法在 R 中的命名向量中选择一系列元素?
- npm - Microsoft Teams 应用程序授权:ngrok 网关错误服务器返回了无效或不完整的 HTTP 响应
- swiftui - SwiftUI:如何在 macOS 11 上使用 NSSearchToolBarItem?
- python - 无法使用上下文管理器从线程中捕获异常
- pygame - 使用带有 DirectFB 的 PyGame 在屏幕中心出现奇怪的符号