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 25 Javascript
5款JavaScript代码压缩工具推荐
Jul 07 Javascript
非jQuery实现照片散落桌子上,单击放大的LightBox效果
Nov 28 Javascript
js实现按钮控制图片360度翻转特效的方法
Feb 17 Javascript
JavaScript与jQuery实现的闪烁输入效果
Feb 18 Javascript
纯js实现html转pdf的简单实例(推荐)
Feb 16 Javascript
详解vue嵌套路由-params传递参数
May 23 Javascript
JavaScript之iterable_动力节点Java学院整理
Jun 29 Javascript
20个最常见的jQuery面试问题及答案
May 23 jQuery
ionic grid(栅格)九宫格制作详解
Jun 30 Javascript
javascript面向对象三大特征之多态实例详解
Jul 24 Javascript
JavaScript实现轮播图片完整代码
Mar 07 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
php4的session功能评述(三)
2006/10/09 PHP
Laravel 4 初级教程之Pages、表单验证
2014/10/30 PHP
php使用str_replace实现输入框回车替换br的方法
2014/11/24 PHP
微信支付PHP SDK ―― 公众号支付代码详解
2016/09/13 PHP
详谈php中 strtr 和 str_replace 的效率问题
2017/05/14 PHP
实现php删除链表中重复的结点
2018/09/27 PHP
PHP网站常见安全漏洞,及相应防范措施总结
2021/03/01 PHP
JavaScript 异步调用框架 (Part 1 - 问题 & 场景)
2009/08/03 Javascript
jquery实现的可隐藏重现的靠边悬浮层实例代码
2013/05/27 Javascript
利用ajaxfileupload插件实现文件上传无刷新的具体方法
2013/06/08 Javascript
聊一聊JS中的prototype
2016/09/29 Javascript
微信js-sdk上传与下载图片接口用法示例
2016/10/12 Javascript
原生js仿浏览器滚动条效果
2017/03/02 Javascript
layui框架中layer父子页面交互的方法分析
2017/11/15 Javascript
jQuery实现带右侧索引功能的通讯录示例【附源码下载】
2018/04/17 jQuery
详解可以用在VS Code中的正则表达式小技巧
2019/05/14 Javascript
javascript实现fetch请求返回的统一拦截
2019/12/22 Javascript
微信小程序之高德地图多点路线规划过程示例详解
2021/01/18 Javascript
[01:24:51]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS NewBee第二场
2014/05/26 DOTA
[05:31]DOTA2上海特级锦标赛主赛事第三日RECAP
2016/03/05 DOTA
Linux 发邮件磁盘空间监控(python)
2016/04/23 Python
Python使用QRCode模块生成二维码实例详解
2017/06/14 Python
Python实现感知器模型、两层神经网络
2017/12/19 Python
Python实现PS滤镜特效Marble Filter玻璃条纹扭曲效果示例
2018/01/29 Python
基于OpenCV python3实现证件照换背景的方法
2019/03/22 Python
python自动循环定时开关机(非重启)测试
2019/08/26 Python
python爬虫模拟浏览器的两种方法实例分析
2019/12/09 Python
打包PyQt5应用时的注意事项
2020/02/14 Python
教你使用Sublime text3搭建Python开发环境及常用插件安装另分享Sublime text3最新激活注册码
2020/11/12 Python
css3 中translate和transition的使用方法
2020/03/26 HTML / CSS
奥地利智能家居和智能生活网上商店:tink.at
2019/10/07 全球购物
五型班组建设方案
2014/02/10 职场文书
《乌塔》教学反思
2014/02/17 职场文书
2015年党风廉政建设责任书
2015/01/29 职场文书
MongoDB连接数据库并创建数据等使用方法
2021/11/27 MongoDB
详解Go语言中Get/Post请求测试
2022/06/01 Golang