js中浮点型运算BUG的解决方法说明


Posted in Javascript onJanuary 06, 2014

曾经项目用到过的,之前在网上找到此代码,但在特定条件下除法和加法运算依然会出现BUG个人对此稍作优化

//除法函数,用来得到精确的除法结果
//说明:javascript的除法结果会有误差,在两个浮点数相除的时候会比较明显。这个函数返回较为精确的除法结果。
//调用:accDiv(arg1,arg2)
//返回值:arg1除以arg2的精确结果
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) { }
    with (Math) {
        r1 = Number(arg1.toString().replace(".", ""))
        r2 = Number(arg2.toString().replace(".", ""))
        return accMul((r1 / r2),pow(10, t2 - t1));
    }
}

//乘法函数,用来得到精确的乘法结果
//说明:javascript的乘法结果会有误差,在两个浮点数相乘的时候会比较明显。这个函数返回较为精确的乘法结果。
//调用:accMul(arg1,arg2)
//返回值:arg1乘以arg2的精确结果
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); 
}
Javascript 相关文章推荐
使用js获取QueryString的方法小结
Feb 28 Javascript
jQuery(非HTML5)可编辑表格实现代码
Dec 11 Javascript
jquery实现简单的自动播放幻灯片效果
Jun 13 Javascript
JS中使用DOM来控制HTML元素
Jul 31 Javascript
纯js仿淘宝京东商品放大镜功能
Mar 02 Javascript
兼容浏览器的js事件绑定函数(详解)
May 09 Javascript
PHP 实现一种多文件上传的方法
Sep 20 Javascript
浅析Vue自定义组件的v-model
Nov 26 Javascript
详解关于Vue版本不匹配问题(Vue packages version mismatch)
Sep 17 Javascript
vue调试工具vue-devtools安装及使用方法
Nov 07 Javascript
微信小程序 自定义弹窗实现过程(附代码)
Dec 05 Javascript
webpack+vue-cil 中proxyTable配置接口地址代理操作
Jul 18 Javascript
Jquery操作radio的简单实例
Jan 06 #Javascript
jQuery选择器全面总结
Jan 06 #Javascript
JavaScript定义类的几种方式总结
Jan 06 #Javascript
javascript函数定义的几种区别小结
Jan 06 #Javascript
javascript 用函数语句和表达式定义函数的区别详解
Jan 06 #Javascript
js形成页面的一种遮罩效果实例代码
Jan 04 #Javascript
JavaScript将数据转换成整数的方法
Jan 04 #Javascript
You might like
php的hash算法介绍
2014/02/13 PHP
Mootools 1.2教程 正则表达式
2009/09/15 Javascript
JQuery 确定css方框模型(盒模型Box Model)
2010/01/22 Javascript
使用jQuery.Validate进行客户端验证(初级篇) 不使用微软验证控件的理由
2010/06/28 Javascript
jquery实现pager控件示例
2014/04/09 Javascript
jquery实现导航固定顶部的效果仿蘑菇街
2014/10/22 Javascript
bootstrap输入框组代码分享
2016/06/07 Javascript
Javascript将数值转换为金额格式(分隔千分位和自动增加小数点)
2016/06/22 Javascript
node.js express安装及示例网站搭建方法(分享)
2016/08/22 Javascript
Nodejs进阶:核心模块net入门学习与实例讲解
2016/11/21 NodeJs
解决nodejs中使用http请求返回值为html时乱码的问题
2017/02/18 NodeJs
jQuery实现注册会员时密码强度提示信息功能示例
2017/09/05 jQuery
Webpack 服务器端代码打包的示例代码
2017/09/19 Javascript
Nodejs 和 Electron ubuntu下快速安装过程
2018/05/04 NodeJs
vue配置多页面的实现方法
2018/05/22 Javascript
Node.js console控制台简单用法分析
2019/01/04 Javascript
element的el-table中记录滚动条位置的示例代码
2019/11/06 Javascript
js实现鼠标切换图片(无定时器)
2021/01/27 Javascript
为Python的web框架编写前端模版的教程
2015/04/30 Python
Python 将Matrix、Dict保存到文件的方法
2018/10/30 Python
Python实现去除图片中指定颜色的像素功能示例
2019/04/13 Python
python调试神器PySnooper的使用
2019/07/03 Python
深入浅析python的第三方库pandas
2020/02/13 Python
python读写文件write和flush的实现方式
2020/02/21 Python
python GUI库图形界面开发之PyQt5工具栏控件QToolBar的详细使用方法与实例
2020/02/28 Python
CSS3属性box-shadow使用详细教程
2012/01/21 HTML / CSS
CSS3 @media的基本用法总结
2019/09/10 HTML / CSS
UGG雪地靴荷兰官网:UGG荷兰
2016/09/09 全球购物
Expedia挪威官网:酒店、机票和租车
2018/03/03 全球购物
《母鸡》教学反思
2014/02/25 职场文书
法律顾问服务方案
2014/05/15 职场文书
2014学习优秀共产党员先进事迹思想汇报
2014/09/14 职场文书
政风行风评议整改方案
2014/09/15 职场文书
群众路线自查报告及整改措施
2014/11/04 职场文书
高中家长意见怎么写
2015/06/03 职场文书
小学运动会报道稿
2015/07/22 职场文书