js 自定义加减乘除方法(防止js自身计算错误)
<!DOCTYPE html>
<html> <head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
</head> <body>
<script type="text/javascript">
/**
* 乘法
* @param arg1
* @param arg2
* @returns {Number}
*/
function accMul(arg1, arg2) {
var m = ,
s1 = arg1.toString(),
s2 = arg2.toString();
try {
m += s1.split(".")[].length
} catch(e) {}
try {
m += s2.split(".")[].length
} catch(e) {}
return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(, m)
}
/**
* 除法
* @param arg1
* @param arg2
* @returns {Number}
*/
function accDiv(arg1, arg2) {
var t1 = ,
t2 = ,
r1, r2;
try {
t1 = arg1.toString().split(".")[].length
} catch(e) {}
try {
t2 = arg2.toString().split(".")[].length
} catch(e) {}
with(Math) {
r1 = Number(arg1.toString().replace(".", ""))
r2 = Number(arg2.toString().replace(".", ""))
return(r1 / r2) * pow(, t2 - t1);
}
}
/**
* 加法
* @param arg1
* @param arg2
* @returns {Number}
*/
function accAdd(arg1, arg2) {
var r1, r2, m, c;
try {
r1 = arg1.toString().split(".")[].length
} catch(e) {
r1 =
}
try {
r2 = arg2.toString().split(".")[].length
} catch(e) {
r2 =
}
c = Math.abs(r1 - r2);
m = Math.pow(, Math.max(r1, r2))
if(c > ) {
var cm = Math.pow(, c);
if(r1 > r2) {
arg1 = Number(arg1.toString().replace(".", ""));
arg2 = Number(arg2.toString().replace(".", "")) * cm;
} else {
arg1 = Number(arg1.toString().replace(".", "")) * cm;
arg2 = Number(arg2.toString().replace(".", ""));
}
} else {
arg1 = Number(arg1.toString().replace(".", ""));
arg2 = Number(arg2.toString().replace(".", ""));
}
return(arg1 + arg2) / m
}
/**
* 减法
* @param arg1
* @param arg2
* @returns
*/
function accSub(arg1, arg2) {
var r1, r2, m, n;
try {
r1 = arg1.toString().split(".")[].length
} catch(e) {
r1 =
}
try {
r2 = arg2.toString().split(".")[].length
} catch(e) {
r2 =
}
m = Math.pow(, Math.max(r1, r2));
//last modify by deeka
//动态控制精度长度
n = (r1 >= r2) ? r1 : r2;
return((arg1 * m - arg2 * m) / m).toFixed(n);
} console.log(accMul(7.88, 0.8) + '--7.88*0.8------乘法'); //乘法
console.log(accDiv(7.88, 0.8) + '--7.88/0.8------除法'); //除法
console.log(accAdd(7.88, 0.8) + '--7.88+0.8------加法'); //加法
console.log(accSub(7.88, 0.8) + '--7.88-0.8------减法'); //减法
</script>
</body> </html>
复制代码封装起来 引入直接调用
js 自定义加减乘除方法(防止js自身计算错误)的更多相关文章
- 纯JS前端分页方法(JS分页)
1.JS分页函数:开发过程中,分页功能一般是后台提供接口,前端只要传page(当前页码)和pageSize(每页最大显示条数)及对应的其他查询条件,就可以返回所需分页显示的数据. 但是有时也需要前端本 ...
- JS高级面试题思路(装箱和拆箱、栈和堆、js中sort()方法、.js中Date对象中的getMounth() 需要注意的、开发中编码和解码使用场景有哪些)
1.装箱和拆箱: 装箱:把基本数据类型转化为对应的引用数据类型的操作: var num = 123 // num var objNum = new Num(123) // object console ...
- 从js的repeat方法谈js字符串与数组的扩展方法
js将字符串重复N次的repeat方法的8个版本 /* *@desc: 将一个字符串重复自身N次 */ //版本1:利用空数组的join方法 function repeat(target, n) { ...
- JS 工具函数 方法(其中js的crc32和php的crc32区别)
var util = {}; util.indexOf = function (array, item) { for (var i = 0; i < array.length; i++) { i ...
- 转载 jQuery和js自定义函数和文件的方法(全网最全)
jQuery和js自定义函数和文件的方法(全网最全) 版权声明:本文为像雾像雨又像风_http://blog.csdn.net/topdandan的原创文章,未经允许不得转载. https:// ...
- ACE.js自定义提示实现方法
ACE.js自定义提示实现方法 时间 2015-11-19 00:55:22 wsztrush's blog 原文 http://wsztrush.github.io/编程技术/2015/11/0 ...
- js Date 函数方法及日期计算
js Date 函数方法 var myDate = new Date(); myDate.getYear(); //获取当前年份(2位) myDate.getFullYear(); //获取完整的年份 ...
- js事件技巧方法整合
window.resizeTo(800,600); //js设置浏览器窗口尺寸 window.open (function(){ resizeTo(640,480);//设置浏览器窗口尺寸 moveT ...
- javascript的setTimeout()用法总结,js的setTimeout()方法
引子 js的setTimeout方法用处比较多,通常用在页面刷新了.延迟执行了等等.但是很多javascript新手对setTimeout的用法还是不是很了解.虽然我学习和应用javascript已经 ...
随机推荐
- 刷新指定窗口页面的gridTable数据
top.frames[windowName].$("#gridTable").trigger("reloadGrid"); 其中”windowName即是窗口页 ...
- iptables nat表配置
- flutter GridView 网格布局
当数据量很大的时候用矩阵方式排列比较清晰.此时我们可以用网格列表组件 GridView 实 现布局. GridView 创建网格列表有多种方式,常用有以下两种. 1.可以通过 GridView.cou ...
- percona-mysql5.7.24使用xtrabackup工具配置主从同步
主从配置详细过程: 环境准备: 配置好服务器,主从服务器都安装并启动mysql数据库 # 添加读写账号和只读账号,应用配置中,写主库用读写账号,统计从库数据yoga只读账号 grant select, ...
- django 实战3 simpleui
pip3 install django-import-export pip3 install django-simpleui pip3 install mysqlclient python3 mana ...
- 一些有用的github收藏(持续更新中...)
1.facebook的c++开源库folly(Facebook open source library)介绍 https://github.com/facebook/folly 2.pprint 一个 ...
- LeetCode_401. Binary Watch
401. Binary Watch Easy A binary watch has 4 LEDs on the top which represent the hours (0-11), and th ...
- Codeforces Round #556 (Div. 2) D. Three Religions 题解 动态规划
题目链接:http://codeforces.com/contest/1150/problem/D 题目大意: 你有一个参考串 s 和三个装载字符串的容器 vec[0..2] ,然后还有 q 次操作, ...
- 软件测试成熟度模型TCMM (转载)
下面我们就看看是如何划分的,来评判一下各位同仁自己所在的公司,所在的级别. TCMM Level 1:Initial(初始级) 测试处于一个混乱的状态,还不能把测试同调试分开,在编码完成后才进行测 ...
- CF1277D Let's Play the Words?
思路: 字符串其实只有0...0, 0...1, 1...0, 1...1四种. 实现: #include <bits/stdc++.h> using namespace std; ]; ...