解决js精度丢失问题

1.加法

Number.prototype.add = function (arg) {
    var r1, r2, m;
    try {
        r1 = this.toString().split(".")[1].length
    } catch (e) {
        r1 = 0
    }
    try {
        r2 = arg.toString().split(".")[1].length
    } catch (e) {
        r2 = 0
    }
    m = Math.pow(10, Math.max(r1, r2))
    return (this.mul(m) + arg.mul(m)).div(m)
}

2.减法

//减法   
Number.prototype.sub = function (arg) {
    return this.add(-arg);
}

3.乘法

//乘法   
Number.prototype.mul = function (arg){
  var m = 0,
    s1 = this.toString(),
    s2 = arg.toString();
  try {
    m += s1.split(".")[1].length
  } catch (e) {}
  try {
    m += s2.split(".")[1].length
  } catch (e) {}
  return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m)
}

4.除法

//除法
Number.prototype.div = function (arg) {
    var t1 = 0, t2 = 0, r1, r2;
    try {
      t1 = this.toString().split(".")[1].length
    } catch (e) { 

    }
    try {
      t2 = arg.toString().split(".")[1].length
    } catch (e) { 

    }
    r1 = Number(this.toString().replace(".", ""))
    r2 = Number(arg.toString().replace(".", ""))
    return (r1/r2).mul(Math.pow(10, t2 - t1));
}

直接挂载到原型上使用就可以了

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容