Skip to content

Instantly share code, notes, and snippets.

@black-black-cat
Created June 16, 2016 16:20
Show Gist options
  • Save black-black-cat/6b4ca381da2f8a0b1e5da99ba6d69177 to your computer and use it in GitHub Desktop.
Save black-black-cat/6b4ca381da2f8a0b1e5da99ba6d69177 to your computer and use it in GitHub Desktop.
浮点数四则运算精度丢失解决方案
// JS 浮点数四则运算精度丢失解决方案
// 计算小数点后面有几位
function getBits(num) {
var eq1;
return (eq1 = num.toString().split('.')[1]) ? eq1.length : 0;
}
// 加法
Number.prototype.add = function(arg) {
var m, m1, m2;
m1 = getBits(this);
m2 = getBits(arg);
m = Math.pow(10, Math.max(m1, m2));
return (this.mul(m) + arg.mul(m)) / m;
};
// 减法
Number.prototype.sub = function(arg) {
return this.add(-arg);
};
// 乘法
Number.prototype.mul = function(arg) {
var m = 0;
var s1 = this.toString();
var s2 = arg.toString();
m += getBits(this) + getBits(arg);
return Number(s1.replace('.', '')) * Number(s2.replace('.', '')) / Math.pow(10, m);
};
// 除法
Number.prototype.div = function(arg) {
var m1 = 0;
var m2 = 0;
var n1, n2;
m1 = getBits(this);
m2 = getBits(arg);
n1 = Number(this.toString().replace('.', ''));
n2 = Number(arg.toString().replace('.', ''));
return (n1 / n2).mul(Math.pow(10, m2 - m1));
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment