转(JS中浮点运算精度错误BUG解决方案)
2015-05-14 11:26
337 查看
JS中的浮点运算有时会出现精度错误的BUG,比如:0.1 + 0.2 = 0.30000000000000004
解决方案如下:
// 除法
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) { } r1 = Number(arg1.toString().replace(".", "")) r2 = Number(arg2.toString().replace(".", "")) return accMul((r1 / r2), Math.pow(10, t2 - t1)); }
// 乘法
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) }
// 加法
function accAdd(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 accDiv((arg1 + arg2),m); }
相关文章推荐
- JS小数运算丢失精度计算错误等解决方案
- JS 浮点数运算丢失精度解决方案
- js浮点运算精度丢失的解决办法
- 一个解决js浮点运算精度的代码
- 关于js语法(运算中出现无限大的问题)本身的错误的解决方案
- js 浮点运算出现的精度丢失问题
- js浮点运算精度丢失的解决办法
- js小数运算精度问题,js浮点数运算时出现精度问题
- [转]JS浮点数运算Bug的解决办法(转)
- js处理浮点运算精度不正确的问题
- js浮点运算精度丢失的解决办法
- JS浮点类型运算精度丢失问题解决办法
- JS 浮点数四则运算精度丢失问题
- 奇怪的js问题(JavaScript浮点运算的问题) float类型相乘的有时候 会出现错误!! 注意!!!
- js浮点运算精度丢失问题
- javascript 浮点数运算错误解决方案
- js浮点运算精度问题和IEEE754
- JS浮点数运算的精度问题-整数的精度问题
- JS浮点类型运算精度丢失问题解决办法
- JS 浮点运算精度解决办法 (把小数转换为整数进行计算【但是不能超过js的整数上限】)