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遍历、动态的添加数据的小例子
Jun 22 Javascript
JavaScript中instanceof与typeof运算符的用法及区别详细解析
Nov 19 Javascript
基于JS实现的倒计时程序实例
Jul 24 Javascript
深入学习jQuery Validate表单验证(二)
Jan 18 Javascript
JavaScript仿网易选项卡制作代码
Oct 06 Javascript
easy ui datagrid 从编辑框中获取值的方法
Feb 22 Javascript
Angular.js基础学习之初始化
Mar 10 Javascript
Javascript(es2016) import和require用法和区别详解
Aug 11 Javascript
ECMAscript 变量作用域总结概括
Aug 18 Javascript
vue webpack开发访问后台接口全局配置的方法
Sep 18 Javascript
详解Vue后台管理系统开发日常总结(组件PageHeader)
Nov 01 Javascript
vue之组件内监控$store中定义变量的变化详解
Nov 08 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将某个目录下面的所有文件罗列出来的方法详解
2013/06/21 PHP
从PHP的源码中深入了解stdClass类
2014/04/18 PHP
php简单实现查询数据库返回json数据
2015/04/16 PHP
php邮件发送的两种方式
2020/04/28 PHP
使用PHP处理数据库数据如何将数据返回客户端并显示当前状态
2016/02/16 PHP
Laravel中log无法写入问题的解决
2017/06/17 PHP
Smarty模板类内部原理实例分析
2019/07/03 PHP
理解Javascript_06_理解对象的创建过程
2010/10/15 Javascript
jQuery setTimeout()函数使用方法
2013/04/07 Javascript
深入理解JavaScript程序中内存泄漏
2016/03/17 Javascript
浅谈Javascript数组(推荐)
2016/05/17 Javascript
jQuery 3 中的新增功能汇总介绍
2016/06/12 Javascript
JavaScript中变量、指针和引用功能与操作示例
2018/08/04 Javascript
jQuery pager.js 插件动态分页功能实例分析
2019/08/02 jQuery
python教程之用py2exe将PY文件转成EXE文件
2014/06/12 Python
python实现绘制树枝简单示例
2014/07/24 Python
Python根据区号生成手机号码的方法
2015/07/08 Python
Python实现连接postgresql数据库的方法分析
2017/12/27 Python
浅谈python正则的常用方法 覆盖范围70%以上
2018/03/14 Python
Python实现iOS自动化打包详解步骤
2018/10/03 Python
对python以16进制打印字节数组的方法详解
2019/01/24 Python
在python中计算ssim的方法(与Matlab结果一致)
2019/12/19 Python
python脚本监控logstash进程并邮件告警实例
2020/04/28 Python
Python通过两个dataframe用for循环求笛卡尔积
2020/04/29 Python
Python3获取cookie常用三种方案
2020/10/05 Python
随机分配座位,共50个学生,使学号相邻的同学座位不能相邻
2014/01/18 面试题
大学辅导员事迹材料
2014/02/05 职场文书
《月球之谜》教学反思
2014/04/10 职场文书
小学教师师德承诺书
2014/05/23 职场文书
教师工作总结范文2014
2014/11/10 职场文书
父亲节寄语大全
2015/02/27 职场文书
离婚起诉书怎么写
2015/05/19 职场文书
生活委员竞选稿
2015/11/21 职场文书
mysql分表之后如何平滑上线详解
2021/11/01 MySQL
Java GUI编程菜单组件实例详解
2022/04/07 Java/Android
如何用H5实现好玩的2048小游戏
2022/07/23 HTML / CSS