阅读 260

JS精度计算方法(完美解决js计算精度问题)

大致思路

微信图片_20211201200407.jpg

计算时把小数转整数计算,去避免 javascript 小数计算时带来的精度丢失。

1.1 * 10 转成 (11 * 100) /10

代码

const compute = (v1, type, v2) => {   let times = 0; // 差值倍数   console.log(v1, type, v2);   v1 = v1.toString();   v2 = v2.toString();   let rightLen1 = (v1.split('.')[1] && v1.split('.')[1].length) || 0;   let rightLen2 = (v2.split('.')[1] && v2.split('.')[1].length) || 0;   times = rightLen1 > rightLen2 ? rightLen1 : rightLen2; // 最大长度   console.log('times', times);   let maxMultiple = 1;   v1 = v1.toString().replace('.', '');   v2 = v2.toString().replace('.', '');   // 补零,获取倍率   if (rightLen1 > rightLen2) {     maxMultiple = maxMultiple + ''.padEnd(rightLen1, '0');     v2 = v2 + ''.padEnd(times, '0');     console.log('补零', v2);   } else if (rightLen1 < rightLen2) {     maxMultiple = maxMultiple + ''.padEnd(rightLen2, '0');     v1 = v1 + ''.padEnd(times, '0');     console.log('补零', v1);   } else {     maxMultiple = maxMultiple + ''.padEnd(rightLen2, '0');   }   console.log('maxMultiple', maxMultiple);   // 转成number类型   v1 = +v1;   v2 = +v2;   switch (type) {     case '-':       return (v1 - v2) / maxMultiple;     case '+':       return (v1 + v2) / maxMultiple;     case '*':       return (v1 * v2) / maxMultiple / maxMultiple;     case '/':       return v1 / v2;     default:       throw Error('运算符错误 请输入+-*/');       break;   } }; let res = compute(34.35, 34.31, '-'); console.log(res); // 加法例子 0.1+0.2 // 减法例子 34.35-34.31 // 乘法例子 1.11*10 复制代码

大致代码思路如上,可以复制代码到本地尝试或优化一下。


作者:dddz
链接:https://juejin.cn/post/7036701625112592392

 伪原创工具 SEO网站优化  https://www.237it.com/ 


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐