您的位置:首页 > Web前端 > JavaScript

javascript中做减法时,出现小数位增加bug

2013-02-06 15:21 447 查看
地址:http://www.iteye.com/problems/92347

这个bug是js固有的,浮点数精度不准,你可以用下面方法来解决,思路是先放大,求和、差、积等运算后再缩小。

如:

//加法函数,用来得到精确的加法结果

//说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。

//调用:accAdd(arg1,arg2)

//返回值:arg1加上arg2的精确结果

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方法,调用起来更加方便。

Number.prototype.add = function(arg) {

return accAdd(arg, this);

}

//减法函数,用来得到精确的减法结果

//说明:javascript的减法结果会有误差,在两个浮点数相减的时候会比较明显。这个函数返回较为精确的加法结果。

//调用:accSub(arg1,arg2)

//返回值:arg1减去arg2的精确结果

function accSub(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);

}

//给Number类型增加一个sub方法,调用起来更加方便。

Number.prototype.sub = function(arg) {

return accSub(arg, this);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐