bigint的JSON传输:12000000000002539转换为12000000000002540
JSON transfer of bigint: 12000000000002539 is converted to 12000000000002540?
我正在传输原始数据,如[{id: 12000000000002539, Name: "Some Name"}]
,我在解析后获得对象[{id: 12000000000002540, Name: "Some Name"}]
,目前服务器端将id转换为字符串似乎有所帮助。但是是否有更好的方法来正确地传输bigint数据呢?
该值实际上是不超过JavaScript中的最大数值("仅" 1.7308左右)。
但是值超出了"整型精度"的范围。这并不是说发送了错误的数字:相反,是文字 12000000000002539 只能精确地表示为 12000000000002540,因此在JavaScript中没有正确的数值。(积分范围约为+/- 253)
这是一个有趣的现象,使用双相对精度(在IEEE-754中为binary64)类型来存储所有数值,包括整数:
12000000000002539 === 12000000000002540 // true
精确存储为数值的十进制位数的最大有效位数是15(实际上是15.95)。在上面,有17位有效数字,所以一些的最低有效信息被静默地丢失了。在本例中,作为JavaScript解析器/引擎读入的文本值。在JavaScript中处理这种大小的整数的唯一安全方法是使用字符串字面值或以另一种方式将其分解(例如自定义数字类型或"bigint库")。但是,我建议只使用字符串,因为它是人类可读的,相对紧凑(在JSON中只有两个额外的字符),并且不需要特殊的序列化。由于该值在本例中只是一个"id",我希望不需要对其执行数学运算:)
快乐编码。
相关文章:
- 如何在JavaScript中将字符串转换为函数引用
- 如何在Javascript中将JSon对象转换为数组
- 使用JS将数组转换为json对象
- 如何使用json将对象列表从java转换为javascript
- 偶尔结结巴巴地说“;堆叠的”;translate()上的转换(v4.0.0-alpha40)
- 为什么在单独的函数中应用时转换会闪烁/断断续续(D3)
- 在Javascript中转换对象数组
- 将数字转换为一定数量的硬币
- 将纯文本URL转换为可单击链接
- 当图像转换为本地存储的DataURL时,EXIF被删除
- 如何使用js将SNAPSHOT内部版本号转换为3位数的整数
- 如何将TypeScript对象转换为普通对象
- 检测个位数整数时正在转换毫秒
- 从javascript到jquery的转换
- DOM事件通过JSON转换为java
- 将圆柱体转换为弯管
- 混合 ui-sref 和 $state.go 在 Angular ui-router 中进行状态转换
- JavaScript代码问题:我正在将对象转换为数组
- 如何将字母转换为二进制代码
- 将XML转换为普通的旧JavaScript对象