<!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自身计算错误)的更多相关文章

  1. 纯JS前端分页方法(JS分页)

    1.JS分页函数:开发过程中,分页功能一般是后台提供接口,前端只要传page(当前页码)和pageSize(每页最大显示条数)及对应的其他查询条件,就可以返回所需分页显示的数据. 但是有时也需要前端本 ...

  2. JS高级面试题思路(装箱和拆箱、栈和堆、js中sort()方法、.js中Date对象中的getMounth() 需要注意的、开发中编码和解码使用场景有哪些)

    1.装箱和拆箱: 装箱:把基本数据类型转化为对应的引用数据类型的操作: var num = 123 // num var objNum = new Num(123) // object console ...

  3. 从js的repeat方法谈js字符串与数组的扩展方法

    js将字符串重复N次的repeat方法的8个版本 /* *@desc: 将一个字符串重复自身N次 */ //版本1:利用空数组的join方法 function repeat(target, n) { ...

  4. JS 工具函数 方法(其中js的crc32和php的crc32区别)

    var util = {}; util.indexOf = function (array, item) { for (var i = 0; i < array.length; i++) { i ...

  5. 转载 jQuery和js自定义函数和文件的方法(全网最全)

    jQuery和js自定义函数和文件的方法(全网最全)    版权声明:本文为像雾像雨又像风_http://blog.csdn.net/topdandan的原创文章,未经允许不得转载. https:// ...

  6. ACE.js自定义提示实现方法

    ACE.js自定义提示实现方法 时间 2015-11-19 00:55:22  wsztrush's blog 原文  http://wsztrush.github.io/编程技术/2015/11/0 ...

  7. js Date 函数方法及日期计算

    js Date 函数方法 var myDate = new Date(); myDate.getYear(); //获取当前年份(2位) myDate.getFullYear(); //获取完整的年份 ...

  8. js事件技巧方法整合

    window.resizeTo(800,600); //js设置浏览器窗口尺寸 window.open (function(){ resizeTo(640,480);//设置浏览器窗口尺寸 moveT ...

  9. javascript的setTimeout()用法总结,js的setTimeout()方法

    引子 js的setTimeout方法用处比较多,通常用在页面刷新了.延迟执行了等等.但是很多javascript新手对setTimeout的用法还是不是很了解.虽然我学习和应用javascript已经 ...

随机推荐

  1. vue+springboot上传和下载附件功能

    https://blog.csdn.net/qq_35867245/article/details/84325385 上传附件(服务端代码) 第一步:在application.yml中配置附件要上传的 ...

  2. typescript属性类型接口

    /* typeScript中的接口 - 1.属性类接口 */ /* 接口的作用:在面向对象的编程中,接口是一种规范的定义,它定义了行为和动作的规范,在程序设计里面,接口起到一种限制和规范的作用.接口定 ...

  3. libfacedetection

    libfacedetection测试 #include <stdio.h> #include <opencv2/opencv.hpp> #include <facedet ...

  4. Java二维数组的应用

    package com.imooc; public class ArrayDemo5 { public static void main(String[] args) { //二维数组的声明和创建: ...

  5. F110增强

    1.F110 删除操作的增强: 方法:SE19   ZE_F110_DELETE_CHECK 代码: ENHANCEMENT 1  ZE_F110_DELETE_CHECK.    "act ...

  6. bladex之nacos配置

    blade.yaml #服务器配置server:  undertow:    # 设置IO线程数, 它主要执行非阻塞的任务,它们会负责多个连接, 默认设置每个CPU核心一个线程    io-threa ...

  7. LeetCode_345. Reverse Vowels of a String

    345. Reverse Vowels of a String Easy Write a function that takes a string as input and reverse only ...

  8. 分类:logistic回归

    import numpy as np import matplotlib.pyplot as plt x=np.linspace(-1,1,200) y=1/(1+np.exp(10*x-1)) pl ...

  9. Swift4.0复习协议

    1.协议的定义: /// 定义一个协议MyProt protocol MyProt {   /// 声明了一个实例方法foo, /// 其类型为:() -> Void func foo()   ...

  10. LODOP判断没成功发送任务-重打一下

    一般情况下打印执行了PRINT()或PRINTA(),就会加入打印机队列,如果打印机脱机,就会在队列里排队,当打印机连上并取消脱机的时候,正在排队的任务就会打出,所以一般建议用是否加入队列来判断打印成 ...