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控件的相对独立性
Sep 06 Javascript
js 利用className得到对象的实现代码
Nov 15 Javascript
JQuery实现超链接鼠标提示效果的方法
Jun 10 Javascript
javascript给span标签赋值的方法
Nov 26 Javascript
js获取元素的外链样式的简单实现方法
Jun 06 Javascript
利用js获取下拉框中所选的值
Dec 01 Javascript
ES6新增的math,Number方法
Aug 06 Javascript
javascript观察者模式实现自动刷新效果
Sep 05 Javascript
在vue中实现简单页面逆传值的方法
Nov 27 Javascript
使用puppeteer破解极验的滑动验证码
Feb 24 Javascript
vue click.stop阻止点击事件继续传播的方法
Sep 04 Javascript
小程序实现搜索框
Jun 19 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下防止单引号,双引号在接受页面转义的设置方法
2008/09/25 PHP
php中常用字符串处理代码片段整理
2011/11/07 PHP
修改apache配置文件去除thinkphp url中的index.php
2014/01/17 PHP
PHP经典面试题集锦
2015/03/19 PHP
浅谈php+phpStorm+xdebug配置方法
2015/09/17 PHP
PHP.vs.JAVA
2016/04/29 PHP
PHP使用curl制作简易百度搜索
2016/11/03 PHP
ThinkPHP 3.2.2实现事务操作的方法
2017/05/05 PHP
PHP实现的多进程控制demo示例
2019/07/22 PHP
学习ExtJS Panel常用方法
2009/10/07 Javascript
js给dropdownlist添加选项的小例子
2013/03/04 Javascript
如何判断微信内置浏览器(通过User Agent实现)
2014/09/01 Javascript
在JavaScript中处理字符串之link()方法的使用
2015/06/08 Javascript
jQuery简单实现两级下拉菜单效果代码
2015/09/15 Javascript
Angularjs整合微信UI(weui)
2016/03/15 Javascript
jQuery事件对象总结
2016/10/17 Javascript
初识NodeJS服务端开发入门(Express+MySQL)
2017/04/07 NodeJs
vue.js源代码core scedule.js学习笔记
2017/07/03 Javascript
基于vue-resource jsonp跨域问题的解决方法
2018/02/03 Javascript
Jquery和CSS实现选择框重置按钮功能
2018/11/08 jQuery
详解在create-react-app使用less与antd按需加载
2018/12/06 Javascript
Jquery Datatables的使用详解
2020/01/30 jQuery
[01:29]2017 DOTA2国际邀请赛官方英雄手办展示
2017/03/18 DOTA
python删除特定文件的方法
2015/07/30 Python
Python中的单行、多行、中文注释方法
2018/07/19 Python
对python判断是否回文数的实例详解
2019/02/08 Python
Python 变量的创建过程详解
2019/09/02 Python
python报错: 'list' object has no attribute 'shape'的解决
2020/07/15 Python
python 如何上传包到pypi
2020/12/24 Python
阳光体育:Sunny Sports(购买露营和远足设备)
2018/08/07 全球购物
全球性的在线商店:Vogca
2019/05/10 全球购物
英国健康和美容技术产品购物网站:CurrentBody
2019/07/17 全球购物
师说教学反思
2014/02/07 职场文书
环卫工人慰问信
2015/02/15 职场文书
2015年仓库工作总结
2015/04/09 职场文书
2016大学先进团支部事迹材料
2016/03/01 职场文书