国外做贸易网站,视频网站移动端,lamp网站开发黄金组合,麓谷做网站的公司大小仅 1KB#xff01;超级好用#xff01;计算无敌#xff01;
js 原生的数字计算是一个令人头痛的问题#xff0c;最常见的就是浮点数精度丢失。
// 1. 加减运算
0.1 0.2 // 结果#xff1a;0.30000000000000004#xff08;预期 0.3#xff09;
0.7 - 0.1 // 结果超级好用计算无敌js 原生的数字计算是一个令人头痛的问题最常见的就是浮点数精度丢失。// 1. 加减运算0.10.2// 结果0.30000000000000004预期 0.30.7-0.1// 结果0.6000000000000001预期 0.6// 2. 乘法精度偏移0.1*0.2// 结果0.020000000000000004预期 0.023*0.3// 结果0.8999999999999999预期 0.9// 3. 除法结果异常0.3/0.1// 结果2.9999999999999996预期 31.2/0.2// 结果5.999999999999999预期 6在金额计算的场景中出现这种问题是很危险的例如「0.1 元 .2 元」本应等于 0.3 元原生计算却会得出 0.30000000000000004 元直接导致金额显示错误或支付逻辑异常。不少人会用toFixed四舍五入保留 2 位小数来格式化数字它本质上是字符串格式化工具而非精度修复工具而且还会带来新的精度问题 ——toFixed的四舍五入规则是 “银行家舍入法”无法解决底层计算的精度误差。// 问题1. 四舍五入规则不符合预期1.005.toFixed(2);// 结果1.00预期 1.012.005.toFixed(2);// 结果2.00同样问题1.235.toFixed(2);// 结果1.23预期 1.24// 问题2. 无法修复底层计算误差constsum0.10.2;// 0.30000000000000004sum.toFixed(2);// 结果0.30表面正确但误差仍存在后续再运算仍然有问题sum.toFixed(10);// 结果0.3000000000仅隐藏误差未消除而number-precision能解决这些问题。number-precision 的优势在哪轻量化大小仅 1kbAPI 极简化只有加减乘除和四舍五入专注精度问题无额外心智负担兼容性好无额外依赖适用场景中小型项目、仅需解决基础加减乘除精度问题的场景如电商、金融类简单计算对包体积敏感的前端项目。如何使用pnpminstallnumber-precisionimportNPfromnumber-precisionNP.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混合的计算importNPfromnumber-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综合数学能力强场景覆盖广体积庞大性能开销高数据可视化、工程计算