js浮点数精度丢失和toFixed四舍五入不准问题
1. js的浮点数计算不准确替代方案
例如:
0.1 + 0.2 = 0.30000000000000004 // 应该是 0.3
替代方案
- big.js: 提供了十进制的计算,方法略少,但足够使用,体积最小。
- bignumber.js:提供了超高精度的数字处理能力,可以解决精度丢失问题。
- decimal.js:可以精确表示浮点数,解决精度丢失问题。
- number-precision: 可以做四舍五入,加减乘除各种运算。
- currency.js:货币格式化,优先使用 Intl.NumberFormat ,不行再使用此库。
2. toFixed四舍五入不准的替代方法
例如:
(2.005).toFixed(2) // '2.00', 应该是 2.01 (1.45).toFixed(1) // '1.4', 应该是 1.5
替代方案
//重写toFixed Number.prototype.toFixed=function(s) { const adjust = this >= 0 ? 0.5 : -0.5; return (parseInt(this * Math.pow( 10, s ) + adjust)/ Math.pow( 10, s )).toString(); } //toLocaleString function format(num, decimals){ return num.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2, useGrouping: false }) } //或者Intl.NumberFormat function format(num, decimals){ const formatter = new Intl.NumberFormat('en-US', { minimumFractionDigits: decimals, maximumFractionDigits: decimals, useGrouping: false }) return formatter.format(num) }
也可以直接使用上面的库来解决
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2019-06-26 服务器推送(Server push)技术总结
2018-06-26 双向绑定的极简实现
2017-06-26 dom方法insertAfter的实现
2017-06-26 斐波那契数列的递归和非递归解法