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 刷新框架页的代码
Apr 13 Javascript
判断日期是否能跨月查询的js代码
Jul 25 Javascript
浅谈Javascript变量作用域问题
Dec 16 Javascript
原生javascript实现隔行换色
Jan 04 Javascript
基于JavaScript代码实现兼容各浏览器的设为首页和加入收藏
Jan 07 Javascript
浅析jQuery事件之on()方法绑定多个选择器,多个事件
Apr 27 Javascript
AngularJS 执行流程详细介绍
Aug 18 Javascript
通过原生JS实现为元素添加事件的方法
Nov 23 Javascript
Bootstrap实现各种进度条样式详解
Apr 13 Javascript
jquery加载单文件vue组件的方法
Jun 20 jQuery
如何使用CSS3和JQuery easing 插件制作绚丽菜单
Jun 18 jQuery
js实现图片无缝循环轮播
Oct 28 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 ajax 静态分页过程形式
2011/09/02 PHP
Php Ctemplate引擎开发相关内容
2012/03/03 PHP
PHP获取中英混合字符串长度的方法
2014/06/07 PHP
php网站被挂木马后的修复方法总结
2014/11/06 PHP
PHP实现将科学计数法转换为原始数字字符串的方法
2014/12/16 PHP
简单了解PHP编程中数组的指针的使用
2015/11/30 PHP
javascript使用location.search的示例
2013/11/05 Javascript
javascript为下拉列表动态添加数据项
2014/05/23 Javascript
node.js中的fs.openSync方法使用说明
2014/12/17 Javascript
JS实现图片高亮展示效果实例
2015/11/24 Javascript
jQuery实现二级下拉菜单效果
2016/01/05 Javascript
基于Node.js实现nodemailer邮件发送
2016/01/26 Javascript
Active控件问题小结(附解决办法)
2016/06/09 Javascript
js获取元素下的第一级子元素的方法(推荐)
2017/03/05 Javascript
深入理解vue $refs的基本用法
2017/07/13 Javascript
Vue+Jwt+SpringBoot+Ldap完成登录认证的示例代码
2018/05/21 Javascript
vue2.0+vuex+localStorage代办事项应用实现详解
2018/05/31 Javascript
[38:30]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第一场2
2014/05/24 DOTA
[01:07]DOTA2次级职业联赛 - Fpb战队宣传片
2014/12/01 DOTA
python k-近邻算法实例分享
2014/06/11 Python
给你选择Python语言实现机器学习算法的三大理由
2017/11/15 Python
TensorFlow深度学习之卷积神经网络CNN
2018/03/09 Python
python实现五子棋游戏(pygame版)
2020/01/19 Python
Python Scrapy框架第一个入门程序示例
2020/02/05 Python
详解pycharm的python包opencv(cv2)无代码提示问题的解决
2021/01/29 Python
CSS实现的一闪而过的图片闪光效果
2014/04/23 HTML / CSS
美国牛仔品牌:True Religion
2018/11/16 全球购物
大唐面试试题(CPU,UNIX等等)
2012/01/11 面试题
解释一下ruby中的特殊方法与特殊类
2013/02/26 面试题
报关员个人职业生涯规划书
2014/03/12 职场文书
2014年宣传思想工作总结
2014/12/10 职场文书
2015年社区教育工作总结
2015/05/13 职场文书
办公室规章制度范本
2015/08/04 职场文书
pytorch 6 batch_train 批训练操作
2021/05/28 Python
详解Java ES多节点任务的高效分发与收集实现
2021/06/30 Java/Android
vue 把二维或多维数组转一维数组
2022/04/24 Vue.js