JS中的浮点运算问题
最近又遇到在前台进行浮点运算的问题,一开始从网上直接复制了一段浮点运算的代码,在测试中发现依然存在问题。
现在将修改过的代码贴出啦,与大家分享。
var FloatCalculate={ //浮点数运算 floatAdd:function(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 return ((FloatCalculate.floatMul(arg1, m) + FloatCalculate.floatMul(arg2, m)) / m); }, floatSub:function(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); return ((FloatCalculate.floatMul(arg1, m) - FloatCalculate.floatMul(arg2, m)) / m).toFixed(n); }, floatMul:function(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); }, floatDiv:function(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 FloatCalculate.floatMul((r1 / r2), pow(10, t2 - t1)); } } }
作者:ThinkWang
出处:http://www.cnblogs.com/ThinkWang/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。