zoukankan      html  css  js  c++  java
  • JS解决浮点数据类型的计算(引用)

    //除法函数,用来得到精确的除法结果 
    //说明:javascript的除法结果会有误差,在两个浮点数相除的时候会比较明显。这个函数返回较为精确的除法结果。 
    //调用:accDiv(arg1,arg2) 
    //返回值:arg1除以arg2的精确结果 

    function accDiv(arg1,arg2){ 
    var t1=0,t2=0,r1,r2; 
    try{t1=arg1.toString().split(".")[1].length}catch(e){} 
    try{t2=arg2.toString().split(".")[1].length}catch(e){} 
    with(Math){ 
    r1=Number(arg1.toString().replace(".","")) 
    r2=Number(arg2.toString().replace(".","")) 
    return (r1/r2)*pow(10,t2-t1); 


    //给Number类型增加一个div方法,调用起来更加方便。 
    Number.prototype.div = function (arg){ 
    return accDiv(this, arg); 


    //乘法函数,用来得到精确的乘法结果 
    //说明:javascript的乘法结果会有误差,在两个浮点数相乘的时候会比较明显。这个函数返回较为精确的乘法结果。 
    //调用:accMul(arg1,arg2) 
    //返回值:arg1乘以arg2的精确结果 
    function accMul(arg1,arg2) 

    var m=0,s1=arg1.toString(),s2=arg2.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类型增加一个mul方法,调用起来更加方便。 
    Number.prototype.mul = function (arg){ 
    return accMul(arg, this); 


    //加法函数,用来得到精确的加法结果 
    //说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。 
    //调用:accAdd(arg1,arg2) 
    //返回值:arg1加上arg2的精确结果 
    function accAdd(arg1,arg2){ 
    var r1,r2,m; 
    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)) 
    return (arg1*m+arg2*m)/m 

    //给Number类型增加一个add方法,调用起来更加方便。 
    Number.prototype.add = function (arg){ 
    return accAdd(arg,this); 


    //减法函数,用来得到精确的减法结果 
    //说明:javascript的减法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的减法结果。 
    //调用:accSubtr(arg1,arg2) 
    //返回值:arg1减去arg2的精确结果 
    function accSubtr(arg1,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));
    //动态控制精度长度
    n=(r1>=r2)?r1:r2;
    return ((arg1*m-arg2*m)/m).toFixed(n);

    //给Number类型增加一个subtr 方法,调用起来更加方便。 
    Number.prototype.subtr = function (arg){ 
    return accSubtr(arg,this); 


    在你要用的地方包含这些函数,然后调用它来计算就可以了。 
    比如你要计算:7*0.8 ,则改成 (7).mul(8) 
    其它运算类似,就可以得到比较精确的结果。

  • 相关阅读:
    75. Sort Colors
    101. Symmetric Tree
    121. Best Time to Buy and Sell Stock
    136. Single Number
    104. Maximum Depth of Binary Tree
    70. Climbing Stairs
    64. Minimum Path Sum
    62. Unique Paths
    css知识点3
    css知识点2
  • 原文地址:https://www.cnblogs.com/dengnan/p/2934898.html
Copyright © 2011-2022 走看看