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);
}
这个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);
}
相关文章推荐
- 欧卡2 使用修改器增加金币后出现bug 负的金币数
- vs2008中javascrip 智能感知出现bug及对javascript建议(原创)
- vs2008中javascrip 智能感知出现bug及对javascript建议(原创)
- Javascript 函数parseInt()转换时出现bug
- ArcGIS API for JavaScript使用中出现的BUG(1)
- ArcGIS API for JavaScript使用中出现的BUG(1)
- javascript实时保存时出现修改多条记录的bug
- Javascript 函数parseInt()转换时出现bug问题
- IE Bug 1 - 错误识别出现在javascript脚本中的字符串,导致HTML标签解析错误
- 【javascript基础】之【IE著名bug——如果某个实例属性与标为[[DontEnum]]的某个属性同名,那么该实例属性不会出现在for in】
- javascript实时保存时出现改动多条记录的bug
- Javascript 函数parseInt()转换时出现bug问题
- Android;sql数据库:关于删除数据库数据无法刷新listview并且新listview的修改增加功能出现bug的问题
- 英文环境 JAVASCRIPT(JS)提示中文出现乱码的解决办法
- SharePoint 2010 打包 KB2756920 出现无法访问的问题,是一个bug,要卸载掉
- 项目中出现的小bug
- Javascript在IE下设置innerHTML时出现未知的运行时错误的解决方法
- myeclipse中增加user libraries时出现“ One or more selected libraries are already on the build path”时的解决办法
- 自己写的javascript map 函数, 用于统计字符出现次数
- [收藏]用JavaScript让弹出页面以最小化的形式出现在状态栏中