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 相关文章推荐
JS页面延迟执行一些方法(整理)
Nov 11 Javascript
浅析jquery的作用与优势
Dec 02 Javascript
angularJS结合canvas画图例子
Feb 09 Javascript
jQuery中ztree 点击文本框弹出下拉框的实例代码
Feb 05 Javascript
Bootstrap模态框使用详解
Feb 15 Javascript
JS排序之快速排序详解
Apr 08 Javascript
vue.js整合vux中的上拉加载下拉刷新实例教程
Jan 09 Javascript
vue之浏览器存储方法封装实例
Mar 15 Javascript
微信小程序实现登录注册tab切换效果
Dec 29 Javascript
vue实现权限控制路由(vue-router 动态添加路由)
Nov 04 Javascript
javascript实现随机抽奖功能
Dec 30 Javascript
原生js拖拽功能制作滑动条实例代码
Feb 05 Javascript
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
PHP将HTML转换成文本的实现代码
2015/01/21 PHP
PHP调试的强悍利器之PHPDBG
2016/02/22 PHP
php闭包中使用use声明变量的作用域实例分析
2018/08/09 PHP
JS实现标签页效果(配合css)
2013/04/03 Javascript
Javascript中的delete操作符详细介绍
2014/06/06 Javascript
js限制文本框只能输入数字方法小结
2014/06/16 Javascript
推荐一款jQuery插件模板
2015/01/09 Javascript
Javascript中数组方法汇总(推荐)
2015/04/01 Javascript
使用JavaScript的AngularJS库编写hello world的方法
2015/06/23 Javascript
封装的dialog插件 基于bootstrap模态对话框的简单扩展
2016/08/10 Javascript
NodeJS远程代码执行
2016/08/28 NodeJs
ionic由于使用了header和subheader导致被遮挡的问题的两种解决方法
2016/09/22 Javascript
Bootstrap 网格系统布局详解
2017/03/19 Javascript
JS简单判断字符在另一个字符串中出现次数的2种常用方法
2017/04/20 Javascript
node.js中express-session配置项详解
2017/05/31 Javascript
JS实现经典的中国地区三级联动下拉菜单功能实例【测试可用】
2017/06/06 Javascript
深入理解 webpack 文件打包机制(小结)
2018/01/08 Javascript
angular6.x中ngTemplateOutlet指令的使用示例
2018/08/09 Javascript
js实现适配移动端的拖动效果
2020/01/13 Javascript
Python删除windows垃圾文件的方法
2015/07/14 Python
利用Tkinter和matplotlib两种方式画饼状图的实例
2017/11/06 Python
Python实现的本地文件搜索功能示例【测试可用】
2018/05/30 Python
使用 Python 合并多个格式一致的 Excel 文件(推荐)
2019/12/09 Python
美国从事品牌鞋类零售的连锁店:Famous Footwear
2016/08/25 全球购物
英国在线照明超市:Castlegate Lights
2019/10/30 全球购物
大学生入党思想汇报
2014/01/01 职场文书
《最大的“书”》教学反思
2014/02/14 职场文书
学校搬迁方案
2014/06/15 职场文书
个人融资协议书
2014/10/02 职场文书
2014年企业党建工作总结
2014/12/18 职场文书
2015年酒店工作总结
2015/04/28 职场文书
2015年小学语文教师工作总结
2015/10/23 职场文书
小学中队长竞选稿
2015/11/20 职场文书
解析Java异步之call future
2021/06/14 Java/Android
python中%格式表达式实例用法
2021/06/18 Python
SQLServer RANK() 排名函数的使用
2022/03/23 SQL Server