当前位置: 首页 > news >正文

【Javascript】js精度丢失

当JS处理大整数或者浮点数的时候会出现精度丢失的情况。
Javascript的数字都使用双精度浮点数表示,遵循IEEE754标准

比如我遇到的问题,对一个小数的四舍五入,保留2位小数:
235.985≈235.98
235.9851≈235.99
原理请大家参考百度,本文只提供解决方案:
在JavaScript中处理精度丢失问题,可以采用以下方法:

1. 大整数处理

  • 使用字符串传输:与后端约定,将大整数(如ID)作为字符串返回,避免JSON解析时转为不准确的Number。
  • JSON解析处理:使用JSON.parse的reviver函数检测并转换大数为字符串:
    JSON.parse(jsonString, (key, value) => {if (typeof value === 'number' && (value > Number.MAX_SAFE_INTEGER || value < Number.MIN_SAFE_INTEGER)) {return value.toString(); // 转换为字符串}return value;
    });
    
  • 使用BigInt类型:对需要运算的大整数,使用ES6的BigInt
    const bigNum = BigInt("12345678901234567890"); // 使用字符串初始化
    console.log(bigNum + 1n); // 运算需使用同类型
    

2. 浮点数精度问题

  • 转为整数计算
    const result = (0.1 * 10 + 0.2 * 10) / 10; // 0.3
    
  • 使用第三方库(如decimal.js):
    import Decimal from 'decimal.js';
    const sum = new Decimal(0.1).plus(0.2).toString(); // "0.3"
    

3. 第三方库推荐

  • 大数运算bignumber.jsmath.js
  • 精确小数decimal.jsbig.js

4. JSON序列化BigInt

  • 自定义序列化方法:
    const data = { id: 12345678901234567890n };
    const json = JSON.stringify(data, (key, value) => typeof value === 'bigint' ? value.toString() : value
    );
    

5. 前后端协作

  • 明确数据格式:确保可能超出安全范围的字段(如ID、长整型)以字符串形式传输。

总结

  • 大整数:优先字符串传输,使用BigInt或库处理。
  • 浮点数:转为整数计算或使用专用库。
  • 兼容性:检查BigInt支持情况,必要时引入Polyfill。

通过以上策略,可有效避免JavaScript中的精度丢失问题。

http://www.lryc.cn/news/543979.html

相关文章:

  • 让Word插上AI的翅膀:如何把DeepSeek装进Word
  • 秒杀系统的常用架构是什么?怎么设计?
  • 【文件基础操作】小笔记
  • RabbitMQ系列(七)基本概念之Channel
  • 本地搭建Koodo Reader书库结合内网穿透打造属于自己的移动图书馆
  • DeepSeek R1 训练策略4个阶段解析
  • 【博资考4】网安学院-硕转博考试内容
  • 30 分钟从零开始入门 CSS
  • C语言综合案例:学生成绩管理系统
  • 使用python做http代理请求
  • 数据库事务的基本要素(ACID)
  • DeepSeek R1满血+火山引擎详细教程
  • 大型语言模型技术对比:阿里Qwen qwq、DeepSeek R1、OpenAI o3与Grok 3
  • ArcGIS Pro可见性分析:精通地形视线与视域分析
  • 计算机工具基础(五)——Vim
  • Android应用app实现AI电话机器人接打电话
  • Mobaxterm服务器常用命令(持续更新)
  • Android14窗口管理自适应投屏分辨率
  • Shot Studio for macOS 发布 1.0.2
  • 《深度学习实战》第4集:Transformer 架构与自然语言处理(NLP)
  • Starrocks入门(二)
  • 银河麒麟高级服务器操作系统在线调整/pro/{PID}/limits文件中nofile的软限制和硬限制参数值操作方法
  • html css js网页制作成品——HTML+CSS甜品店网页设计(5页)附源码
  • Open WebUI项目源码学习记录(从0开始基于纯CPU环境部署一个网页Chat服务)
  • 【Python 入门基础】—— 人工智能“超级引擎”,AI界的“瑞士军刀”,
  • 蓝桥杯练习代码
  • Imagination通过最新的D系列GPU IP将效率提升至新高度
  • C高级——shell(3)
  • 【C语言】第八期——指针、二维数组与字符串
  • docker 运行claude 的computer use