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 相关文章推荐
父节点获取子节点的字符串示例代码
Feb 26 Javascript
JQuery的常用选择器、过滤器、方法全面介绍
May 25 Javascript
jquery实现全选、不选、反选的两种方法
Sep 06 Javascript
原生js仿淘宝网商品放大镜效果
Feb 28 Javascript
DataTables添加额外的查询参数和删除columns等无用参数实例
Jul 04 Javascript
详解如何实现一个简单的 vuex
Feb 10 Javascript
原生JS实现自定义下拉单选选择框功能
Oct 12 Javascript
微信小程序自定义组件传值 页面和组件相互传数据操作示例
May 05 Javascript
JavaScript怎样在删除前添加确认弹出框?
May 27 Javascript
微信小程序 wx:for遍历循环使用实例解析
Sep 09 Javascript
JS常见错误(Error)及处理方案详解
Jul 02 Javascript
八种Vue组件间通讯方式合集(推荐)
Aug 18 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
destoon网站转移服务器后搜索汉字出现乱码的解决方法
2014/06/21 PHP
php字符比较函数similar_text、strnatcmp与strcasecmp用法分析
2014/11/18 PHP
php实现源代码加密的方法
2015/07/11 PHP
php创建无限级树型菜单
2015/11/05 PHP
JS动态获取当前时间,并写到特定的区域
2013/05/03 Javascript
JS远程获取网页源代码实例
2013/09/05 Javascript
Javascript实现检测客户端类型代码封包
2015/12/03 Javascript
Bootstarp风格的toggle效果分享
2016/02/23 Javascript
利用Node.js检测端口是否被占用的方法
2017/12/07 Javascript
微信小程序实现的贪吃蛇游戏【附源码下载】
2018/01/03 Javascript
JavaScript展开操作符(Spread operator)详解
2019/07/20 Javascript
layer.js之回调销毁对话框的例子
2019/09/11 Javascript
JS函数进阶之prototy用法实例分析
2020/01/15 Javascript
js 解析 JSON 数据简单示例
2020/04/21 Javascript
vue中解决微信html5原生ios虚拟键返回不刷新问题
2020/10/20 Javascript
[01:28]国服启动器接入蒸汽平台操作流程视频
2021/03/11 DOTA
部署Python的框架下的web app的详细教程
2015/04/30 Python
python实现连接mongodb的方法
2015/05/08 Python
在Python中操作文件之seek()方法的使用教程
2015/05/24 Python
Python下的Softmax回归函数的实现方法(推荐)
2017/01/26 Python
Django自定义用户认证示例详解
2018/03/14 Python
PyCharm代码回滚,恢复历史版本的解决方法
2018/10/22 Python
Mac下Anaconda的安装和使用教程
2018/11/29 Python
Python多线程处理实例详解【单进程/多进程】
2019/01/30 Python
python针对Oracle常见查询操作实例分析
2020/04/30 Python
在终端启动Python时报错的解决方案
2020/11/20 Python
介绍下Java的输入输出流
2014/01/22 面试题
学前教育毕业生自荐信
2013/10/29 职场文书
退伍老兵事迹材料
2014/01/31 职场文书
家长学校实施方案
2014/03/15 职场文书
消防安全责任书
2014/04/14 职场文书
党委班子剖析材料
2014/08/21 职场文书
校园文化艺术节宣传标语
2014/10/09 职场文书
大学副班长竞选稿
2015/11/21 职场文书
零基础学java之带返回值的方法的定义和调用
2022/04/10 Java/Android
pandas时间序列之pd.to_datetime()的实现
2022/06/16 Python