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

大小仅 1KB!超级好用!计算无敌!

大小仅 1KB!超级好用!计算无敌!

js 原生的数字计算是一个令人头痛的问题,最常见的就是浮点数精度丢失。

// 1. 加减运算0.1+0.2// 结果:0.30000000000000004(预期 0.3)0.7-0.1// 结果:0.6000000000000001(预期 0.6)// 2. 乘法精度偏移0.1*0.2// 结果:0.020000000000000004(预期 0.02)3*0.3// 结果:0.8999999999999999(预期 0.9)// 3. 除法结果异常0.3/0.1// 结果:2.9999999999999996(预期 3)1.2/0.2// 结果:5.999999999999999(预期 6)

在金额计算的场景中出现这种问题是很危险的,例如「0.1 元 + .2 元」本应等于 0.3 元,原生计算却会得出 0.30000000000000004 元,直接导致金额显示错误或支付逻辑异常。

不少人会用toFixed四舍五入,保留 2 位小数来格式化数字,它本质上是字符串格式化工具,而非精度修复工具,而且还会带来新的精度问题 ——toFixed的四舍五入规则是 “银行家舍入法”,无法解决底层计算的精度误差。

// 问题1. 四舍五入规则不符合预期1.005.toFixed(2);// 结果:"1.00"(预期 "1.01")2.005.toFixed(2);// 结果:"2.00"(同样问题)1.235.toFixed(2);// 结果:"1.23"(预期 "1.24")// 问题2. 无法修复底层计算误差constsum=0.1+0.2;// 0.30000000000000004sum.toFixed(2);// 结果:"0.30"(表面正确,但误差仍存在,后续再运算仍然有问题)sum.toFixed(10);// 结果:"0.3000000000"(仅隐藏误差,未消除)

number-precision能解决这些问题。

number-precision 的优势在哪?

  • 轻量化,大小仅 1kb
  • API 极简化,只有加减乘除和四舍五入
  • 专注精度问题,无额外心智负担
  • 兼容性好,无额外依赖

适用场景

  • 中小型项目、仅需解决基础加减乘除精度问题的场景(如电商、金融类简单计算)
  • 对包体积敏感的前端项目。

如何使用?

pnpminstallnumber-precision
importNPfrom'number-precision'NP.strip(0.09999999999999998);// = 0.1NP.plus(0.1,0.2);//加法计算 = 0.3, not 0.30000000000000004NP.plus(2.3,2.4);//加法计算 = 4.7, not 4.699999999999999NP.minus(1.0,0.9);//减法计算 = 0.1, not 0.09999999999999998NP.times(3,0.3);//乘法计算 = 0.9, not 0.8999999999999999NP.times(0.362,100);//乘法法计算 = 36.2, not 36.199999999999996NP.divide(1.21,1.1);//除法计算 = 1.1, not 1.0999999999999999NP.round(0.105,2);//四舍五入,保留2位小数 = 0.11, not 0.1

混合的计算:

importNPfrom'number-precision'// (0.8-0.5)x1000,保留2位小数NP.round(NP.times(NP.minus(0.8,0.5),1000),2)// 计算股票收益率NP.round(NP.times(NP.divide(NP.minus(+price,+cost),+cost),100),2)

更复杂的计算场景用什么

number-precision有短小精悍的优势在,基本的运算都能拿捏,但那些要求更高的计算场景用什么库呢?

特点场景库体积优势劣势适用场景
toFixed内置方法,仅用于数字格式化,不解决底层精度问题0无需额外引入,使用便捷无法修复计算误差,四舍五入规则非标准非精确场景的临时格式化
number-precision轻量化,提供加减乘除、四舍五入基础功能,无多余1KB体积极小,API 极简,学习成本低不支持超大整数,无复杂数学运算电商价格计算、表单数字校验
big.js专注十进制浮点数运算,API 简洁,默认精度可配置6KB平衡体积与功能,兼容性好功能少于 decimal.js中小型项目精确计算、数据统计
decimal.js功能全面,支持高精度控制、大数字处理、进制转换、三角函数等,可自定义精度配置32KB精度极高,功能覆盖全,灵活性强体积较大,API 较复杂金融核心计算、科学计算
math.js全能型数学库,支持表达式解析、矩阵运算、单位转换等复杂数学能力160KB综合数学能力强,场景覆盖广体积庞大,性能开销高数据可视化、工程计算
http://www.jsqmd.com/news/99842/

相关文章:

  • 使用PaddlePaddle进行中文NLP开发的完整流程(含Git下载与CUDA安装步骤)
  • ComfyUI入门到进阶:AI绘画节点工作流详解
  • Python安装Langchain-Chatchat全流程保姆级教程
  • FLUX.1-dev微调实战:从环境到生成全指南
  • LobeChat能否用于构建舆情监控系统?新闻情感分析实践
  • Java 8 Lambda表达式详解 - 实践
  • pythonstudy Day37
  • Stable Diffusion WebUI:DeepDanbooru动漫标签自动生成指南
  • Qwen3-32B推理优化:响应速度提升50%
  • CSS组件综合实战案例三个:小米侧边栏、五彩导航、列表菜单的样式与链接伪类hover交互
  • Linly-Talker结合RAG技术实现知识增强型虚拟客服系统
  • 2025北京雅思培训机构攻略:高分考生都在pick的5类优质选择 - 品牌测评鉴赏家
  • 开源5G基站硬件参数
  • Git Push大文件错误终极解决指南-解决 git push 8192 MiB 错误的方法
  • LobeChat能否接入Steam API?游戏玩家个性化助手
  • 第十六节_PySide6基本窗口控件深度补充_窗口绘图类(QPainter 类) 中篇
  • 谷歌浏览器插件打包和加载
  • AI搜索时代的GEO优化服务商选型指南 - bykj8888
  • KaLM-Embedding-V2.5:0.5B参数的轻量级嵌入革命
  • RocketMQ 消费者消费堆积问题:原因分析、排查步骤与解决方案
  • 一文读懂7大排班考勤系统的核心差异与适用场景
  • 2025 年雅思培训机构怎么选?5 大标杆机构深度测评与避坑指南 - 品牌测评鉴赏家
  • LobeChat能否实现思维导图输出?结构化内容展示尝试
  • 使用Miniconda管理Python版本
  • 2025年隐形车衣一站式厂家排行榜,新测评精选隐形车衣质量可 - 工业品牌热点
  • ACE-Step:高效可控的开源文生音乐模型
  • 雅思培训机构怎么选?这几家高口碑机构帮你划重点! - 品牌测评鉴赏家
  • Git 回退到某个 commit
  • 2025年专业滑雪场魔毯生产厂家排行榜,靠谱魔毯服务商推荐 - 工业推荐榜
  • 2025无磁铜包钢制造厂TOP5推荐:看哪家更值得选? - mypinpai