javascript中关于浮点数的处理

解决四维运算,js计算失去精度的问题


//加法   
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*m+arg*m)/m   
}     
//减法   
Number.prototype.sub = function (arg){   
    return this.add(-arg);   
}   
//乘法   
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)   
}  
//除法   
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){}   
    with(Math){   
        r1=Number(this.toString().replace(".",""))   
        r2=Number(arg.toString().replace(".",""))   
        return (r1/r2)*pow(10,t2-t1);   
    }   
} 

使用方法

0.1+0.2  // 0.30000000000000004
0.1.add(0.2)  //0.3
0.3-0.1  //0.19999999999999998
0.3.sub(0.1)  //0.2
0.1*0.2  // 0.020000000000000004
0.1.mul(0.2)  //0.02
0.3/0.1  //2.9999999999999996
0.3.div(0.1)  //3
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,208评论 0 13
  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 32,046评论 2 89
  • 初夏上剑阁 隐然藏古寺 破山露禅是 缘来阅门第 (虞山登徒记)
    无用师阅读 338评论 0 0
  • 一、总的介绍和架构 二、分项目组四张PPT 1、分项目简介 2、职员安排 3、操作方式 4、训练能力或核心价值观 ...
    蕾蕾lcm阅读 150评论 0 0
  • JavaScript 标准参考教程(alpha)ECMAScript 6入门 React 入门实例教程React ...
    Aiot阅读 774评论 1 9