js加减乘除精确运算方法实例代码


Posted in Javascript onJanuary 17, 2021

前言

因为计算机数字是浮点型,所以在计算过程中通常得到的并不是一个准确的数据,所以在做一些数组运算的时候比较头疼,我们这里就来写一下精确运算的方法

首先是加法 (这里以两个数据相加为例)

function add(arg1, arg2) {

	 arg1 = arg1.toString(), arg2 = arg2.toString(); // 将传入的数据转化为字符串
  var arg1Arr = arg1.split("."), // 将小数的数据从小数点的位置拆开
   arg2Arr = arg2.split("."),
   d1 = arg1Arr.length == 2 ? arg1Arr[1] : "", // 获取第一个数的小数点的长度
   d2 = arg2Arr.length == 2 ? arg2Arr[1] : ""; // 获取第二个数的小数点的长度
  var maxLen = Math.max(d1.length, d2.length); // 获取小数点长度较大的值
  var m = Math.pow(10, maxLen); // 这里表示10的小数点长度次方 也就是说如果小数点长度为2 m的值就是100 如果小数点长度是3 m的值就是1000如果不懂请自行查找api
  var result = Number(((arg1 * m + arg2 * m) / m).toFixed(maxLen)); // 将小数转化为整数后相加在除掉两个数乘过的倍数然后去小数点较长的长度的小数位数
  var d = arguments[2]; // 第三个参数用户可以自行决定是否要传递 用来定义要保留的小数长度
  return typeof d === "number" ? Number((result).toFixed(d)) : result;
}

add(12.123, 12)

然后是减法 (减法其实就是一个数组加上另一个数字的负数所以和加法逻辑相同)

function sun(arg1, arg2) {
return add(arg1, -arg2)
}

其次是乘法

function mul(arg1, arg2) {
var r1 = arg1.toString(), // 将传入的数据转化为字符串
r2 = arg2.toString(),
m, resultVal, d = arguments[2];
m = (r1.split(".")[1] ? r1.split(".")[1].length : 0) + (r2.split(".")[1] ? r2.split(".")[1].length : 0); // 获取两个数字的小数位数的和
// 乘积的算法就是去掉小数点做整数相乘然后除去10的所有小数位的次方
resultVal = Number(r1.replace(".", "")) * Number(r2.replace(".", "")) / Math.pow(10, m);

return typeof d !== "number" ? Number(resultVal) : Number(resultVal.toFixed(parseInt(d)));
}

最后是减法 (除法和乘法就是一个相反的过程,不做过多解释)

function div(arg1, arg2) {
     var r1 = arg1.toString(),
      r2 = arg2.toString(),
      m, resultVal, d = arguments[2];
     m = (r2.split(".")[1] ? r2.split(".")[1].length : 0) - (r1.split(".")[1] ? r1.split(".")[1].length : 0);
     resultVal = Number(r1.replace(".", "")) / Number(r2.replace(".", "")) * Math.pow(10, m);
     return typeof d !== "number" ? Number(resultVal) : Number(resultVal.toFixed(parseInt(d)));
    }

总结

到此这篇关于js加减乘除精确运算方法的文章就介绍到这了,更多相关js加减乘除精确运算内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
javascript学习笔记(十四) window对象使用介绍
Jun 20 Javascript
解析js原生方法创建表格效率测试
Jul 08 Javascript
zTree插件之单选下拉菜单实例代码
Nov 07 Javascript
jquery实现当滑动到一定位置时固定效果
Jun 17 Javascript
jQuery+css3实现文字跟随鼠标的上下抖动
Jul 31 Javascript
js实现随屏幕滚动的带缓冲效果的右下角广告代码
Sep 04 Javascript
jQuery实现仿QQ头像闪烁效果的文字闪动提示代码
Nov 03 Javascript
Vue.js教程之计算属性
Nov 11 Javascript
图片懒加载imgLazyLoading.js使用详解
Sep 15 Javascript
详解Angular2学习笔记之Html属性绑定
Jan 03 Javascript
微信小程序自定义带价格显示日历效果
Dec 29 Javascript
JS JQuery获取data-*属性值方法解析
Sep 01 jQuery
Angular处理未可知异常错误的方法详解
Jan 17 #Javascript
react-native 实现购物车滑动删除效果的示例代码
Jan 15 #Javascript
vue element el-transfer增加拖拽功能
Jan 15 #Vue.js
关于uniApp editor微信滑动问题
Jan 15 #Javascript
关于javascript中的promise的用法和注意事项(推荐)
Jan 15 #Javascript
详解node.js创建一个web服务器(Server)的详细步骤
Jan 15 #Javascript
JavaScript中展开运算符及应用的实例代码
Jan 14 #Javascript
You might like
PHP5+UTF8多文件上传类
2008/10/17 PHP
PHP strtr() 函数使用说明
2008/11/21 PHP
PHP缩略图等比例无损压缩,可填充空白区域补充色
2011/06/10 PHP
php控制linux服务器常用功能 关机 重启 开新站点等
2012/09/05 PHP
使用Thinkphp框架开发移动端接口
2015/08/05 PHP
深入理解PHP 数组之count 函数
2016/06/13 PHP
laravel ORM 只开启created_at的几种方法总结
2018/01/29 PHP
PHP+Redis链表解决高并发下商品超卖问题(实现原理及步骤)
2020/08/03 PHP
javascript 常用关键字列表集合
2007/12/04 Javascript
javascript web页面刷新的方法收集
2009/07/02 Javascript
js setTimeout opener的用法示例详解
2013/10/23 Javascript
JS、jquery实现几分钟前、几小时前、几天前等时间差显示效果的代码实例分享
2014/04/11 Javascript
js创建一个input数组并绑定click事件的方法
2014/06/12 Javascript
jquery操作复选框checkbox的方法汇总
2015/02/05 Javascript
JavaScript实现给按钮加上双重动作的方法
2015/08/14 Javascript
AngularJS 视图详解及示例代码
2016/08/17 Javascript
浅谈JS读取DOM对象(标签)的自定义属性
2016/11/21 Javascript
vue2.0中vue-cli实现全选、单选计算总价格的实例代码
2017/07/18 Javascript
JS 中document.write()的用法和清空的原因浅析
2017/12/04 Javascript
原生js实现3D轮播图
2020/03/21 Javascript
微信小程序按顺序同步执行的两种方式
2019/12/20 Javascript
解决antd 表单设置默认值initialValue后验证失效的问题
2020/11/02 Javascript
Python多项式回归的实现方法
2019/03/11 Python
python实现控制COM口的示例
2019/07/03 Python
python psutil监控进程实例
2019/12/17 Python
Python语法垃圾回收机制原理解析
2020/03/25 Python
泰国综合购物网站:Lazada泰国
2018/04/09 全球购物
Wedgwood英国官方网站:英式精致骨瓷餐具、礼品与生活精品,源于1759年
2019/09/02 全球购物
大学生职业生涯规划范文
2014/01/08 职场文书
应急管理培训方案
2014/06/12 职场文书
快递员岗位职责
2014/09/12 职场文书
领导班子作风建设年个人整改措施
2014/09/29 职场文书
优秀团员事迹材料
2014/12/25 职场文书
2015年幼儿园学期工作总结
2015/05/22 职场文书
MySQL 使用索引扫描进行排序
2021/06/20 MySQL
java项目构建Gradle的使用教程
2022/03/24 Java/Android