$(function () {
console.log("加");
console.log(1.9 + 1.9 + 1.9);
console.log(accAdd(1.9, 1.9, 1.9));
console.log("减");
console.log(5.7 - 1.9);
console.log(accSub(5.7, 1.9));
console.log("乘");
console.log(1.4 * 29 * 29);
console.log(accMui(1.4, 29, 29));
console.log("除");
console.log(5.7 / 3);
console.log(accDiv(5.7, 3));
});
//加法优化
function accAdd(...args) {
//var result;
if (args.length > 0) {
var result = args[0];
for (var i = 1; i < args.length; i++) {
var current, r1, r2, m, c;
current = args[i];
try {
r1 = result.toString().split(".")[1].length;
} catch (e) {
r1 = 0;
}
try {
r2 = current.toString().split(".")[1].length;
} catch (e) {
r2 = 0;
}
c = Math.abs(r1 - r2); //取出两个数字小数位的差 abs()函数取绝对值
m = Math.pow(10, Math.max(r1, r2)); //两个数字最后扩大的倍数
if (c > 0) { //c为两个数字小数长度的差的绝对值
// 大于0说明两个数字小数位数不同 不大于0说明相同
var cm = Math.pow(10, c); //需要在小数少的数字后补零
if (r1 > r2) { //分情况讨论,长度不同时,要在小数位数少的数字后补0
result = Number(result.toString().replace(".", ""));
current = Number(current.toString().replace(".", "")) * cm;
} else {
result = Number(result.toString().replace(".", "")) * cm;
current = Number(current.toString().replace(".", ""));
}
} else {
result = Number(result.toString().replace(".", ""));
current = Number(current.toString().replace(".", ""));
}
result = (result + current) / m;
}
return result;
}
}
//减法优化
function accSub(...args) {
if (args.length > 0) {
var result = args[0];
for (var i = 1; i < args.length; i++) {
var r1, r2, m, n, current = args[i];
try {
r1 = result.toString().split(".")[1].length;
} catch (e) {
r1 = 0;
}
try {
r2 = current.toString().split(".")[1].length;
} catch (e) {
r2 = 0;
}
c = Math.abs(r1 - r2); //取出两个数字小数位的差 abs()函数取绝对值
m = Math.pow(10, Math.max(r1, r2)); //两个数字最后扩大的倍数
if (c > 0) { //c为两个数字小数长度的差的绝对值
// 大于0说明两个数字小数位数不同 不大于0说明相同
var cm = Math.pow(10, c); //需要在小数少的数字后补零
if (r1 > r2) { //分情况讨论,长度不同时,要在小数位数少的数字后补0
result = Number(result.toString().replace(".", ""));
current = Number(current.toString().replace(".", "")) * cm;
} else {
result = Number(result.toString().replace(".", "")) * cm;
current = Number(current.toString().replace(".", ""));
}
} else {
result = Number(result.toString().replace(".", ""));
current = Number(current.toString().replace(".", ""));
}
result = (result - current) / m;
}
return result;
}
}
//乘法优化
function accMui(...args) {
if (args.length > 0) {
var result = args[0];
for (var i = 1; i < args.length; i++) {
var m = 0, current = args[i], s1 = result.toString(), s2 = current.toString();
try {
m += s1.split(".")[1].length;
} catch (e) {
}
try {
m += s2.split(".")[1].length;
} catch (e) {
}
result = Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m);
}
return result;
}
}
//除法优化
function accDiv(...args) {
if (args.length > 0) {
var result = args[0];
for (var i = 1; i < args.length; i++) {
var t1 = 0, t2 = 0, r1, r2, current = args[i];
try {
t1 = result.toString().split(".")[1].length;
} catch (e) {
}
try {
t2 = current.toString().split(".")[1].length;
} catch (e) {
}
r1 = Number(result.toString().replace(".", ""));
r2 = Number(current.toString().replace(".", ""));
if (t1 > t2) { //如果t1>t2 说明数字1扩大的倍数大,
// 导致r1/r2的结果变大 反之变小
result = (r1 / r2) / Math.pow(10, t1 - t2);
} else {
result = (r1 / r2) * Math.pow(10, r2 - r1);
}
}
return result;
}
}
resultado de la operación: