javaScript浮点数精确运算之加法实现

相信使用过js做加减法计算的人都遇到过这样的问题,那就是0.85+0.1+0.05!=1的情况,这里及存在一个精度的问题,但是不管你是将各加数转为double 还是float类型都没有用,具体js里面的加法原理没有深究,但是我们可以使用如下方式做到精确加法,代码如下,供所有遇到同等问题的人参考。

/**
	 * js加法
	 * */
	var addFunc = function(arg1, arg2) {
	    var r1, r2, m, c;
	    try {
	        r1 = arg1.toString().split(".")[1].length;
	    }
	    catch (e) {
	        r1 = 0;
	    }
	    try {
	        r2 = arg2.toString().split(".")[1].length;
	    }
	    catch (e) {
	        r2 = 0;
	    }
	    c = Math.abs(r1 - r2);
	    m = Math.pow(10, Math.max(r1, r2));
	    if (c > 0) {
	        var cm = Math.pow(10, c);
	        if (r1 > r2) {
	            arg1 = Number(arg1.toString().replace(".", ""));
	            arg2 = Number(arg2.toString().replace(".", "")) * cm;
	        } else {
	            arg1 = Number(arg1.toString().replace(".", "")) * cm;
	            arg2 = Number(arg2.toString().replace(".", ""));
	        }
	    } else {
	        arg1 = Number(arg1.toString().replace(".", ""));
	        arg2 = Number(arg2.toString().replace(".", ""));
	    }
	    return (arg1 + arg2) / m;
	}

到此js实现精确加法就完整实现了,后面有时间会陆续将减法、乘法、除法的实现方法发布上来,可持续关注!
 


版权声明:本文为William0326原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。