我正在传输 [{id: 120000000000002539, Name: "Some Name"}]
之类的原始数据,并且我正在获取对象 [{id: 12000000000002540, Name: "Some Name"}]
解析后,现在服务器端将 id 转换为字符串似乎有帮助。
但是有没有更好的方法来正确传输 bigint 数据?
最佳答案
该值实际上不超过 JavaScript 中的最大数值(“仅”为 1.7308 左右)。
但是,的值超出了“整数精度”的范围。并不是发送了错误的数字:而是字面量 12000000000002539 只能精确地表示为 12000000000002540,因此从来没有 JavaScript 中的正确数值。 (range of integrals 约为 +/- 253。)
这是使用 a double relative-precision 的一个有趣现象(IEEE-754 中的二进制 64)类型来存储所有数值,包括整数:
12000000000002539 === 12000000000002540 // true
精确存储为数值的十进制数字的最大有效位数是 15(实际上是 15.95)。在上面,有 17 位有效数字,因此 一些最不重要的信息会默默地丢失。在这种情况下,as JavaScript 解析器/引擎会读入文字值。
在 JavaScript 中处理这种大小的整数的唯一安全方法是使用字符串文字或以其他方式分解它(例如自定义数字类型或 "bigint library")。但是,我建议只使用字符串,因为它是人类可读的,相对紧凑(JSON 中只有两个额外的字符),并且不需要特殊的序列化。由于在这种情况下该值只是一个“id”,我希望不需要对其执行数学运算:)
编码愉快。
关于javascript - bigint : 12000000000002539 is converted to 12000000000002540? 的 JSON 传输,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8663298/