js控制精度的加减乘除

//加法函数
        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方法,,使用时直接用 .add 即可完成计算。
        Number.prototype.add = function (arg) {
            return accAdd(arg, this);
        };

        //减法函数
        function Subtr(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));
            //last modify by deeka
            //动态控制精度长度
            n = (r1 >= r2) ? r1 : r2;
            return ((arg1 * m - arg2 * m) / m).toFixed(n);
        }

        //给Number类型增加一个add方法,,使用时直接用 .sub 即可完成计算。
        Number.prototype.sub = function (arg) {
            return Subtr(this, arg);
        };

        //乘法函数
        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方法,使用时直接用 .mul 即可完成计算。
        Number.prototype.mul = function (arg) {
            return accMul(arg, this);
        };

        //除法函数
        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方法,,使用时直接用 .div 即可完成计算。
        Number.prototype.div = function (arg) {
            return accDiv(this, arg);
        };

        function setNumAndWeight(num, weight, index, obj) {
            $(obj).parent().next("td").text(getFloatByNum(weight, 4));
            var html = "件数:" + num + "<br>" + "重量:" + getFloatByNum(weight, 4);
            $("tr.tr-" + index).children().eq(4).html(html);
        }

        //强制制保留4位小数,第5位直接舍去。如:2,会在2后面补上00.即2.00
        function toDecimal4(x) {
            var f = parseFloat(x);
            if (isNaN(f)) {
                return false;
            }
            var f = Math.floor(x * 10000) / 10000;
            var s = f.toString();
            var rs = s.indexOf(‘.‘);
            if (rs < 0) {
                rs = s.length;
                s += ‘.‘;
            }
            while (s.length <= rs + 4) {
                s += ‘0‘;
            }
            return s;
        }

调用,直接用:

 weight = parseFloat(perWeight).mul(parseInt(num).add(onboardNum)).sub(onboardWeight);
时间: 2024-10-11 22:06:34

js控制精度的加减乘除的相关文章

JS实现精确加减乘除

说明:项目中要使用 JS 实现自动计算的功能,进行一些浮点数运算时,计算结果却是一长串的值,这里提供一个解决方法,问题基本上可以解决. 具体代码如下: 1 //加法函数 2 function accAdd(arg1, arg2) { 3 var r1, r2, m; 4 try { 5 r1 = arg1.toString().split(".")[1].length; 6 } 7 catch (e) { 8 r1 = 0; 9 } 10 try { 11 r2 = arg2.toSt

JS浮点数的加减乘除运算

文章来源地址:http://blog.csdn.net/lyd518/article/details/7236464 转载请注明出处,尊重作者劳动成果,谢谢!问题这样的: 37.5*5.5=206.08 (JS算出来是这样的一个结果,我四舍五入取两位小数) 我先怀疑是四舍五入的问题,就直接用JS算了一个结果为:206.08499999999998 怎么会这样,两个只有一位小数的数字相乘,怎么可能多出这么小数点出来. 我Google了一下,发现原来这是JavaScript浮点运算的一个bug. 比

一个原生js写的加减乘除运算

根据我的经验我说的再多也没人看,不过还是简单介绍下效果吧,可以选择+,-,*,/,去计算数据,喜欢的话就粘贴复制自己看去吧! <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/

js 实现精确加减乘除

//加法 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

第十四篇 JS实现加减乘除 正则表达式

JS实现加减乘除 这节课,将会继续使用到if判断,会让同学们再看到一个新的,else if判断语句,意思是:否则如果,是基于if下的判断语句,就是说,if不成立则再来判断else if,可以这样,假如a=1,if(a=2){我是2}else if(a=1){我是1}else{我是3},就是这样的关联,但有的同学问,直接用if一直判断就好了,不需要用else if,是这样的,程序运行,else if是基于if的对吧,那么它就是一条语句,如果相同的判断语句多了,全用if,程序就会一个一个去执行,量就

javascript解决小数的加减乘除精度丢失的方案

原因:js按照2进制来处理小数的加减乘除,在arg1的基础上 将arg2的精度进行扩展或逆扩展匹配,所以会出现如下情况. javascript(js)的小数点加减乘除问题,是一个js的bug如0.3*1 = 0.2999999999等,下面列出可以完美求出相应精度的四种js算法 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 function acc

javascript(js)小数精度丢失的解决方案

原因:js按照2进制来处理小数的加减乘除,在arg1的基础上 将arg2的精度进行扩展或逆扩展匹配,所以会出现如下情况. javascript(js)的小数点加减乘除问题,是一个js的bug如0.3*1 = 0.2999999999等,下面列出可以完美求出相应精度的四种js算法 function accDiv(arg1,arg2){ var t1=0,t2=0,r1,r2; try{t1=arg1.toString().split(".")[1].length}catch(e){} t

js加减乘除在线计算器代码

js加减乘除在线计算器代码 在线演示本地下载 原文地址:https://www.cnblogs.com/wwhhq/p/8338136.html

Javascript优化后的加减乘除(解决js浮点数计算bug)

说明 众所周知,js在计算浮点数时候,结果可能会不准确.比如:(在chrome中的运算结果) 2.2 + 2.1 = 4.300000000000001 2.2 - 1.9 = 0.30000000000000027 2.2 * 2.2 = 4.840000000000001 2.1 / 0.3 = 7.000000000000001 网上流传的代码(有bug) 网上流传的优化后的代码如下(有问题的代码,请勿使用) function add(a, b) { var c, d, e; try {