前端大数字精度丢失问题

js 本身的安全精度并不高,具体可以 查看这里

原因

由于 js 数字基于浮点数实现,所以其最高精度范围为:

$$(-(2^{53}-1),2^{53}-1)$$

基本上就是这个常量:

Number.MAX_SAFE_INTEGER; // 9007199254740991

对于传统的 json 框架,为了对齐 js 的解析,通常(这些框架)对于数字也使用双精度浮点数(double)进行数字转换,少数使用单精度浮点数(float):

注:除非常早期的应用以外,已经不存在这个情况了

对于 double 其精度最大范围通常为:$(-(2^{53}-1),2^{53}-1)$
对于 float 其精度最大通常范围为: $(-(2^{24}-1),2^{24}-1)$

解决方案

本文标题:前端大数字精度丢失问题

本文链接:https://iceprosurface.com/2022/js-bigint-error/index.html

作者授权:除特别说明外,本文由 icepro 原创编译并授权刊载发布。

版权声明:本文使用「署名-非商业性使用-相同方式共享 4.0 国际」创作共享协议,转载或使用请遵守署名协议。