js小数相加、相乘失去精度问题解析详解(最优方案)
2017-07-22 11:17
344 查看
我们得到后台返回的float类型的数字,用来相加、相乘失去精度,得到小数点显示很多位,为了这个问题,小编找到一个最优方法,贡献给大家参考。
var CMX = CMX || {}; /** ** 加 **/ CMX.add = 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; }; /** ** 减 **/ CMX.sub = 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)); //last modify by deeka //动态控制精度长度 n = (r1 >= r2) ? r1 : r2; return Number(((arg1 * m - arg2 * m) / m).toFixed(n)); }; /** ** 乘 **/ CMX.mul = 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); }; /** ** 除 **/ CMX.div = 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 (r1 / r2) * pow(10, t2 - t1); } };大家可以复制下来,看看如何,欢迎大家指出错误
相关文章推荐
- 解决js中小数相加损失精度的问题
- JS两个小数相加,精度不对问题
- js小数运算精度问题,js浮点数运算时出现精度问题
- java中float/double浮点数的计算失去精度问题(即小数位数增加的问题)
- JS之小数精度问题
- js精确小数乘法(解决精度问题)
- js中小数运算精度丢失问题
- js中的小数计算精度问题,修正计算精度
- js 浮点小数计算精度问题 parseFloat 精度问题
- 两个数相乘(包括整数和小数),精度问题
- java中float/double浮点数的计算失去精度问题(即小数位数增加的问题)
- JS小数运算精度问题
- JS的浮点数计算精度丢失问题解决方案
- JavaScript小数计算精度丢失问题解决方案
- java中float/double浮点数的计算失去精度问题(即小数位数增加的问题)
- JS 数字相加出现多个小数的问题
- 浮点数相乘失去精度问题
- 关于iOS数据解析小数丢失精度的问题AFNetworking
- js 基本运算小数精度解决问题
- 关于iOS数据解析小数丢失精度的问题AFNetworking