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判断浏览器的比较全的代码
Feb 13 Javascript
prototype Element学习笔记(Element篇三)
Oct 26 Javascript
js实现屏蔽默认快捷键调用自定义事件示例
Jun 18 Javascript
js自动生成的元素与页面原有元素发生堆叠的解决方法
Oct 24 Javascript
angularjs表格分页功能详解
Jan 21 Javascript
JavaScript中关联原型链属性特性
Feb 13 Javascript
微信小程序 首页制作简单实例
Apr 07 Javascript
学习使用Bootstrap页面排版样式
May 11 Javascript
微信小程序实现简易table表格
Jun 19 Javascript
nuxt配置通过指定IP和端口访问的实现
Jan 08 Javascript
vue用elementui写form表单时,在label里添加空格操作
Aug 13 Javascript
在vue项目中引用Antv G2,以饼图为例讲解
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 随机数的产生、页面跳转、件读写、文件重命名、switch语句
2009/08/07 PHP
php设计模式 Decorator(装饰模式)
2011/06/26 PHP
yii框架数据库关联查询操作示例
2019/10/14 PHP
解密效果
2006/06/23 Javascript
Javascript中的delete介绍
2012/09/02 Javascript
jquery 表格的增行删行实现思路
2013/03/21 Javascript
javascript的渐进增强与平稳退化浅谈
2013/11/12 Javascript
Jqgrid设置全选(选择)及获取选择行的值示例代码
2013/12/28 Javascript
js统计录入文本框中字符的个数并加以限制不超过多少
2014/05/23 Javascript
checkbox选中与未选中判断示例
2014/08/04 Javascript
jQuery链使用指南
2015/01/20 Javascript
HTML5之WebSocket入门3 -通信模型socket.io
2015/08/21 Javascript
AngularJS 教程及实例代码
2017/10/23 Javascript
详解为Bootstrap Modal添加拖拽的方法
2018/01/05 Javascript
详解vue+vuex+koa2开发环境搭建及示例开发
2018/01/22 Javascript
Vue仿今日头条实例详解
2018/02/06 Javascript
vue 使某个组件不被 keep-alive 缓存的方法
2018/09/21 Javascript
python中常用检测字符串相关函数汇总
2015/04/15 Python
Python IDLE清空窗口的实例
2018/06/25 Python
Python将8位的图片转为24位的图片实现方法
2018/10/24 Python
python_opencv用线段画封闭矩形的实例
2018/12/05 Python
解决Pycharm界面的子窗口不见了的问题
2019/01/17 Python
解决Pycharm调用Turtle时 窗口一闪而过的问题
2019/02/16 Python
基于python实现高速视频传输程序
2019/05/05 Python
如何在Django配置文件里配置session链接
2019/08/06 Python
django项目中使用手机号登录的实例代码
2019/08/15 Python
解决Pycharm的项目目录突然消失的问题
2020/01/20 Python
新建文件时Pycharm中自动设置头部模板信息的方法
2020/04/17 Python
python中adb有什么功能
2020/06/07 Python
CSS3 input框的实现代码类似Google登录的动画效果
2020/08/04 HTML / CSS
德国W家官网,可直邮中国的母婴商城:Windeln.de
2021/03/03 全球购物
学校七一活动方案
2014/01/19 职场文书
放飞蜻蜓反思
2014/02/05 职场文书
预备党员转正考核材料
2014/06/03 职场文书
三峡导游词
2015/01/31 职场文书
SQL SERVER中的流程控制语句
2022/05/25 SQL Server