经过
在使用JavaScript代码进行计算的时候,发现有时候,明明减法后精确到小数点后两位toFixed(2)函数的时候,明明应该值为16.00的时候,却发现toFixed(2)之后值为15.99。
结果
以下提供加减和tofix的一个重构。
toFixed:
//保留原toFixed函数
Number.prototype._toFixed = Number.prototype.to;
const reloadToFix=function () {
Number.prototype.toFixed = function(t){
const _this=this;
const that=String(_this);
if(t==0||that.indexOf('.')==-1){
return Number(that)._toFixed(0)
}
const number=that.substring(0,that.indexOf('.')+t+1);
return parseFloat(number)._toFixed(t);
}
};
加法:
function accSub(arg1, arg2) {
if (isNaN(arg1)) {
arg1 = 0;
}
if (isNaN(arg2)) {
arg2 = 0;
}
arg1 = Number(arg1);
arg2 = Number(arg2);
var r1, r2, m, n;
try {
r1 = arg1.toString().split(".")[1].length;
}
catch (e) {
r1 = 0;
}
try {
r2 = arg2.toString().split(".")[1].length;
}
catch (e) {
r2 = 0;
}
m = Math.pow(10, Math.max(r1, r2)); //last modify by deeka //动态控制精度长度
n = (r1 >= r2) ? r1 : r2;
return ((arg1 * m - arg2 * m) / m)._toFixed(n);
}
const reloadIncrease=function () {
Number.prototype.increase = function(arg) {
return accAdd(this, arg);
};
};
减法:
function accSub(arg1, arg2) {
if (isNaN(arg1)) {
arg1 = 0;
}
if (isNaN(arg2)) {
arg2 = 0;
}
arg1 = Number(arg1);
arg2 = Number(arg2);
var r1, r2, m, n;
try {
r1 = arg1.toString().split(".")[1].length;
}
catch (e) {
r1 = 0;
}
try {
r2 = arg2.toString().split(".")[1].length;
}
catch (e) {
r2 = 0;
}
m = Math.pow(10, Math.max(r1, r2)); //last modify by deeka //动态控制精度长度
n = (r1 >= r2) ? r1 : r2;
return ((arg1 * m - arg2 * m) / m)._toFixed(n);
}
const reloadReduce=function () {
Number.prototype.reduce = function(arg) {
return accSub(this, arg);
};
};