js 本身的安全精度并不高,具体可以 查看这里
原因
由于 js 数字基于浮点数实现,所以其最高精度范围为:
基本上就是这个常量:
Number.MAX_SAFE_INTEGER; // 9007199254740991
对于传统的 json 框架,为了对齐 js 的解析,通常(这些框架)对于数字也使用双精度浮点数(double)进行数字转换,少数使用单精度浮点数(float):
注:除非常早期的应用以外,已经不存在这个情况了
对于 double
其精度最大范围通常为:
对于 float
其精度最大通常范围为:
解决方案
- 使用 https://github.com/dcodeIO/Long.js/
- 传输中使用 https://github.com/sidorares/json-bigint
- 要求后端 向前端传输的任意数字应当默认精度范围为:
- 直接用字符串传输,把数字扬了
本文标题:前端大数字精度丢失问题
永久链接:https://iceprosurface.com/2022/js-bigint-error/
作者授权:本文由 icepro 原创编译并授权刊载发布。
版权声明:本文使用「署名-非商业性使用-相同方式共享 4.0 国际」创作共享协议,转载或使用请遵守署名协议。