Javascript浮点数加减乘除精度存在bug,封装Number加减乘除来代替运算
//获取数值小数点后的位数
Number.prototype.getNumberOfDigitsAfterDecimalPoint = function() {
const value = this;
try {
return value.toString().split(".")[1].length;
} catch (e) {
return 0;
}
};
//加法
Number.prototype.add = function(value2) {
const value1 = this;
var r1, r2, m;
r1 = value1.getNumberOfDigitsAfterDecimalPoint();
r2 = value2.getNumberOfDigitsAfterDecimalPoint();
m = Math.pow(10, Math.max(r1, r2));
return (parseInt(value1 * m) + parseInt(value2 * m)) / m;
};
//减法
Number.prototype.sub = function(value2) {
const value1 = this;
return value1.add(0 - value2);
};
//乘法
Number.prototype.mul = function(value2) {
const value1 = this;
var m = 0;
var s1 = value1.toString();
var s2 = value2.toString();
m += value1.getNumberOfDigitsAfterDecimalPoint();
m += value2.getNumberOfDigitsAfterDecimalPoint();
return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m);
};
//除法
Number.prototype.div = function(value2) {
const value1 = this;
var t1 = value1.getNumberOfDigitsAfterDecimalPoint();
var t2 = value2.getNumberOfDigitsAfterDecimalPoint();
var r1, r2;
r1 = Number(value1.toString().replace(".", ""));
r2 = Number(value2.toString().replace(".", ""));
return (r1 / r2) * Math.pow(10, t2 - t1);
};