JSON转移bigint:12000000000002539转换为12000000000002540?
我正在传输原始数据,例如[{id: 12000000000002539, Name: "Some Name"}]
并在parsing后得到对象[{id: 12000000000002540, Name: "Some Name"}]
ID到string似乎帮助。 但有没有更好的方法来正确传输bigint数据?
该值实际上不超过JavaScript中的最大数值(“仅”为1.7 308左右)。
但是,这个值超出了“积分精度”的范围。 并不是发送了错误的号码,而是12000000000002539这个字面值 只能表示为 12000000000002540,因此在JavaScript中从来没有正确的数值。 ( 积分范围约为+/- 2 53。 )
这是一个使用双相对精度 (IEEE-754 speak中的binary64)来存储所有数值(包括整数)的有趣现象:
12000000000002539 === 12000000000002540 // true
精确地存储为数字值的最大有效小数位数是15(实际上是15.95)。 在上面,有17位有效数字,所以一些最不重要的信息是悄无声息的丢失 。 在这种情况下,JavaScriptparsing器/引擎读取文字值。
在JavaScript中处理整数的唯一安全方法是使用string或以另一种方式(例如自定义数字types或“bigint库” )对其进行分解。 但是, 我build议只使用一个string ,因为它是人类可读的,相对紧凑(JSON中只有两个额外的字符),并且不需要特殊的序列化。 因为在这种情况下,这个值只是一个“id”,所以我希望math不需要被执行:)
快乐的编码。