javascript 浮点运算

<script type="text/javascript">

    // 两个浮点数求和
    function accAdd(num1,num2){
       var r1,r2,m;
       try{
           r1 = num1.toString().split(‘.‘)[1].length;
       }catch(e){
           r1 = 0;
       }
       try{
           r2=num2.toString().split(".")[1].length;
       }catch(e){
           r2=0;
       }
       m=Math.pow(10,Math.max(r1,r2));
       // return (num1*m+num2*m)/m;
       return Math.round(num1*m+num2*m)/m;
    }

    // 两个浮点数相减
    function accSub(num1,num2){
       var r1,r2,m;
       try{
           r1 = num1.toString().split(‘.‘)[1].length;
       }catch(e){
           r1 = 0;
       }
       try{
           r2=num2.toString().split(".")[1].length;
       }catch(e){
           r2=0;
       }
       m=Math.pow(10,Math.max(r1,r2));
       n=(r1>=r2)?r1:r2;
       return (Math.round(num1*m-num2*m)/m).toFixed(n);
    }
    // 两数相除
    function accDiv(num1,num2){
       var t1,t2,r1,r2;
       try{
           t1 = num1.toString().split(‘.‘)[1].length;
       }catch(e){
           t1 = 0;
       }
       try{
           t2=num2.toString().split(".")[1].length;
       }catch(e){
           t2=0;
       }
       r1=Number(num1.toString().replace(".",""));
       r2=Number(num2.toString().replace(".",""));
       return (r1/r2)*Math.pow(10,t2-t1);
    }

    function accMul(num1,num2){
       var m=0,s1=num1.toString(),s2=num2.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);
    }

  </script>

    <script>
    document.write("使用js原生态方法");
    document.write("<br/> 1.01 + 1.02 ="+(1.01 + 1.02));
    document.write("<br/> 1.01 - 1.02 ="+(1.01 - 1.02));
    document.write("<br/> 0.000001 / 0.0001 ="+(0.000001 / 0.0001));
    document.write("<br/> 0.012345 * 0.000001 ="+(0.012345 * 0.000001));
    document.write("<br/><hr/>");
    document.write("<br/>使用自定义方法");
    document.write("<br/> 1.01 + 1.02 ="+accAdd(1.01,1.02));
    document.write("<br/> 1.01 - 1.02 ="+accSub(1.01,1.02));
    document.write("<br/> 0.000001 / 0.0001 ="+accDiv(0.000001,0.0001));
    document.write("<br/> 0.012345 * 0.000001 ="+accMul(0.012345,0.000001));
    </script>

  

时间: 2024-08-09 22:01:35

javascript 浮点运算的相关文章

重写javascript浮点运算

javascript中变量存储时不区分number和float类型,同一按照float存储; javascript使用IEEE 754-2008标准定义的64bit浮点格式存储number,decimal64对应的整形部分长度为10,小树部分长度为16; javascript做小数点运算会出现不精准. //加法运算 var accAdd = function(num1,num2){ var n1,n2,m; try{ n1 = num1.toString().split(".")[1]

JavaScript浮点运算的问题 (乘法)

<script type="text/javascript"> var get_b_val_final=accMul(get_b_val,100)+"%"; 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(".

JavaScript浮点运算,小数点精度

math.js // JavaScript Document //数学函数 // 浮点数加法运算 function floatAdd(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

JavaScript中Number数字数值浮点运算有误差

JavaScript浮点运算的一个bug. 比如:7*0.8 JavaScript算出来就是:5.6000000000000005 //调用:numberExcept(arg1,arg2) //返回值:arg1除以arg2的精确结果function   numberExcept(arg1,arg2){ var t1=0,t2=0,r1,r2;  try{t1=arg1.toString().split(".")[1].length}catch(e){}  try{t2=arg2.toS

javascript小数相减会出现一长串的小数位数的原因

javascript小数相减会出现一长串的小数位数的原因 <script> var a='38.8'; var b='6.8'; alert(parseFloat(a)-parseFloat(b)); var a=134.22; var b=6; alert(a*b); </script> 以上代码为什么产生一长串小数位出来,虽然比较精确,可没必要呀. 这个和数据结构有关系,整数型自动转换成正型计算,小数型直接转成double型计算.这是在内存中运算的时候必须这样,你该知道计算机只

JS浮点数运算Bug的解决办法【转】

37.5*5.5=206.08 (JS算出来是这样的一个结果,我四舍五入取两位小数) 我先怀疑是四舍五入的问题,就直接用JS算了一个结果为:206.08499999999998 怎么会这样,两个只有一位小数的数字相乘,怎么可能多出这么小数点出来. 我Google了一下,发现原来这是JavaScript浮点运算的一个bug. 比如:7*0.8 JavaScript算出来就是:5.6000000000000005 网上找到了一些解决办法,就是重新写了一些浮点运算的函数或直接扩大倍数运算. 下面就把这

js中Number数字相乘后值不对

问题: 37.5*5.5=206.08 (JS算出来是这样的一个结果,我四舍五入取两位小数) 我先怀疑是四舍五入的问题,就直接用JS算了一个结果为:206.08499999999998 怎么会这样,两个只有一位小数的数字相乘,怎么可能多出这么小数点出来. 我Google了一下,发现原来这是JavaScript浮点运算的一个bug. 比如:7*0.8 JavaScript算出来就是:5.6000000000000005解决方法:网上找到了一些解决办法,就是重新写了一些浮点运算的函数. 下面就把这些

pc端项目问题总结

一.相对路径 1.css文件中所出现的相对路径,以css文件所在位置为准 2.js文件中所出现的相对路径,以导入此js文件所在的动态网页所在的位置为准 二.javascript浮点运算bug 如:119.01 + 0.01 === ??  //  119.02000000000001 原因:js数字类型以64位的IEEE 754格式存储的 办法:最后结果采用 Number.toFixed(2)  保留两位小数 三.异步处理 1.js异步处理原理 1)异步调用过程: 1.主线程发起异步请求 2.工

js的运算小数点的问题

问题这样的: 37.5*5.5=206.08 (JS算出来是这样的一个结果,我四舍五入取两位小数) 我先怀疑是四舍五入的问题,就直接用JS算了一个结果为:206.08499999999998 怎么会这样,两个只有一位小数的数字相乘,怎么可能多出这么小数点出来. 我Google了一下,发现原来这是JavaScript浮点运算的一个bug.  比如:7*0.8 JavaScript算出来就是:5.6000000000000005 网上找到了一些解决办法,就是重新写了一些浮点运算的函数. 下面就把这些