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 24 Javascript
jQuery将所有被选中的checkbox某个属性值连接成字符串的方法
Jan 24 Javascript
用JavaScript实现页面重定向功能的教程
Jun 04 Javascript
JS实现霓虹灯文字效果的方法
Aug 06 Javascript
jquery表单验证插件formValidator使用方法
Apr 01 Javascript
基于JavaScript实现弹幕特效
Aug 27 Javascript
简单谈谈CommonsChunkPlugin抽取公共模块
Dec 31 Javascript
JS计算两个时间相差分钟数的方法示例
Jan 10 Javascript
Vue中v-for的数据分组实例
Mar 07 Javascript
20个必会的JavaScript面试题(小结)
Jul 02 Javascript
vue-cli3.0实现一个多页面应用的历奇经历记录总结
Mar 16 Javascript
Vue是怎么渲染template内的标签内容的
Jun 05 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 无法加载mcrypt.dll的解决办法
2013/04/03 PHP
php使用ereg验证文件上传的方法
2014/12/16 PHP
PC端微信扫码支付成功之后自动跳转php版代码
2017/07/07 PHP
PHP数组Key强制类型转换实现原理解析
2020/09/01 PHP
动态加载外部javascript文件的函数代码分享
2011/07/28 Javascript
js操作CheckBoxList实现全选/反选(在客服端完成)
2013/02/02 Javascript
javascript数组操作(创建、元素删除、数组的拷贝)
2014/04/07 Javascript
使用ngView配合AngularJS应用实现动画效果的方法
2015/06/19 Javascript
简单谈谈json跨域
2016/03/13 Javascript
vue.js+Element实现表格里的增删改查
2017/01/18 Javascript
js推箱子小游戏步骤代码解析
2018/01/10 Javascript
Three.JS实现三维场景
2018/12/30 Javascript
微信小程序配置服务器提示验证token失败的解决方法
2019/04/03 Javascript
使用vue完成微信公众号网页小记(推荐)
2019/04/28 Javascript
nodejs实现用户登录路由功能
2019/05/22 NodeJs
python实现迭代法求方程组的根过程解析
2019/11/25 Javascript
[48:47]VGJ.S vs NB 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[05:23]DOTA2-DPC中国联赛2月1日Recap集锦
2021/03/11 DOTA
Python实现Smtplib发送带有各种附件的邮件实例
2017/06/05 Python
人工智能最火编程语言 Python大战Java!
2017/11/13 Python
Python使用matplotlib绘制正弦和余弦曲线的方法示例
2018/01/06 Python
NumPy.npy与pandas DataFrame的实例讲解
2018/07/09 Python
详解Django中间件的5种自定义方法
2018/07/26 Python
python 3.7.0 安装配置方法图文教程
2018/08/27 Python
pandas 快速处理 date_time 日期格式方法
2018/11/12 Python
Django框架视图介绍与使用详解
2019/07/18 Python
python实现学生信息管理系统源码
2021/02/22 Python
数学教研活动总结
2014/07/02 职场文书
领导班子党的群众路线对照检查材料
2014/09/25 职场文书
乡领导班子四风问题对照检查材料
2014/09/25 职场文书
三提三创主题教育活动查摆整改措施
2014/10/25 职场文书
幼儿园大班见习报告
2014/10/31 职场文书
安全事故隐患排查治理制度
2015/08/05 职场文书
Pandas实现DataFrame的简单运算、统计与排序
2022/03/31 Python
springboot创建的web项目整合Quartz框架的项目实践
2022/06/21 Java/Android
JS前端可视化canvas动画原理及其推导实现
2022/08/05 Javascript