重写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].length;
            }catch(e){
                n1 = 0;
            }
            try{
                n2 = num2.toString().split(".")[1].length;
            }catch(e){
                n2 = 0;
            }
            m = Math.pow(10,Math.max(n1,n2));
            return (num1*m + num2*m)/m;
        }

        //减法运算
        var suntr = function(num1,num2){
            var n1,n2,m,n;
            try{
                n1 = num1.toString().split(".")[1].length;
            }catch(e){
                n1 = 0;
            }
            try{
                n2 = num2.toString().split(".")[1].length;
            }catch(e){
                n2 = 0;
            }
            m = Math.pow(10,Math.max(n1,n2));
            n = (n1 > n2) ? n1 : n2;
            return ((num1*m - num2*m)/m).toFixed(n);
        }

        //乘法运算
        var accMul = function(num1,num2){
            var m = 0,n1,n2,
                s1 = num1.toString(),
                s2 = num2.toString();
            try{
                m += s1.split(".")[1].length;
            }catch(e){

            }
            try{
                m += s2.split(".")[1].length;
            }catch(e){

            }
            n1 = Number(s1.replace(".",""));
            n2 = Number(s2.replace(".",""));
            return n1 * n2 / Math.pow(10,m);
        }

        //除法运算
        var accDivi = function(num1,num2){
            var s1 = 0,s2 = 0,n1,n2;
            try{
                s1 = num1.toString().split(".")[1].length;
            }catch(e){

            }
            try{
                s2 = num2.toString().split(".")[1].length;
            }catch(e){

            }
            with(Math){
                n1 = Number(num1.toString().replace(".",""));
                n2 = Number(num2.toString().replace(".",""));
                return (n1/n2)*Math.pow(10,s2-s1);
            }
        }
时间: 2024-10-28 11:42:14

重写javascript浮点运算的相关文章

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(

WebView 中重写javascript 常用函数

常规函数   javascript 常规函数包括以下3个函数:  (1)alert函数:显示一个警告对话框,包括一个OK按钮. 对应:http://www.dreamdu.com/javascript/window.confirm/(2)confirm函数:显示一个确认对话框,包括OK.Cancel按钮. 对应:http://www.dreamdu.com/javascript/window.alert/(3)prompt函数:显示一个输入对话框,提示等待用户输入. 对应:http://www.

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中重写jQuery对象的方法

jQuery是一个很好的类库,它给我们解决了很多的客户端编程,任何东西都不是万能的,当它不能满足我们的需求时我们需要对它进行重写,同时也不要影响其原有的功能或者修改其原有的功能:我现在的web应用程序大多数时候的数据交互都是通过Ajax来完成的,这样就可以将一些隐藏字段的数据保存在HTML标签的属性中,使HTML标签的代码量减少,如:ID,Timestamp等等,这些不需要用户输入但又不得不提交的字段,通过表单提交的做法是 <input name="ID" value="

javascript函数值的重写

原文:javascript函数值的重写 javascript函数值的重写 定义了一个函数,需要重写这个函数并使用原先的函数值.做法是: 1.定义一个变量让原先函数的值指向它,把原先函数的指向一个新的函数值,在这个函数值中执行原先的函数值. function foo(){ console.log("foo"); } var fooTemp = foo; foo = function(){ console.log("begin"); fooTemp(); console

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资源大全中文版(Awesome最新版)

JavaScript资源大全中文版(Awesome最新版) 目录 前端MVC框架与库 Package Managers Loaders Bundlers Testing Frameworks QA Tools QA工具 Node-Powered CMS Frameworks 节点供电的CMS框架 Templating Engines 模板发动机 Articles and Posts 文章和帖子 Data Visualization 数据可视化 Timeline 时间线 Spreadsheet 电

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型计算.这是在内存中运算的时候必须这样,你该知道计算机只