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 相关文章推荐
浅析document.ready和window.onload的区别讲解
Dec 18 Javascript
jQuery学习笔记之 Ajax操作篇(三) - 过程处理
Jun 23 Javascript
jQuery.Highcharts.js绘制柱状图饼状图曲线图
Mar 14 Javascript
简单实现js鼠标跟随效果
Aug 02 Javascript
angular.js实现购物车功能
Oct 23 Javascript
基于vue-ssr服务端渲染入门详解
Jan 08 Javascript
npm 更改默认全局路径以及国内镜像的方法
May 16 Javascript
vue中的mvvm模式讲解
Jan 31 Javascript
微信小程序如何实现精确的日期时间选择器
Jan 21 Javascript
vue实现列表滚动的过渡动画
Jun 29 Javascript
JS实现斐波那契数列的五种方式(小结)
Sep 09 Javascript
echarts实现晶体球面投影的实例教程
Oct 10 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中文件上传的一个问题
2010/09/04 PHP
PHP游戏编程25个脚本代码
2011/02/08 PHP
php表单提交问题的解决方法
2011/04/12 PHP
CI框架中集成CKEditor编辑器的教程
2014/06/09 PHP
Apache服务器下防止图片盗链的办法
2015/07/06 PHP
PHP多维数组转一维数组的简单实现方法
2015/12/23 PHP
php版微信公众平台开发之验证步骤实例详解
2016/09/23 PHP
JavaScript单元测试ABC
2012/04/12 Javascript
关于ExtJS4.1:快捷键支持的问题
2013/04/24 Javascript
JavaScript 获取任一float型小数点后两位的小数
2014/06/30 Javascript
jQuery实现切换页面过渡动画效果
2015/10/29 Javascript
jQuery通用的全局遍历方法$.each()用法实例
2016/07/04 Javascript
javascript和jQuery实现网页实时聊天的ajax长轮询
2016/07/20 Javascript
discuz表情的JS提取方法分析
2017/03/22 Javascript
jQuery实现简单漂亮的Nav导航菜单效果
2017/03/29 jQuery
BootStrap的双日历时间控件使用
2017/07/25 Javascript
使用DataTable插件实现异步加载数据
2017/11/19 Javascript
JS限制输入框输入的实现代码
2018/07/02 Javascript
浅谈ng-zorro使用心得
2018/12/03 Javascript
vue中eslintrc.js配置最详细介绍
2018/12/21 Javascript
JS实现的获取银行卡号归属地及银行卡类型操作示例
2019/01/08 Javascript
vue-cli基础配置及webpack配置修改的完整步骤
2019/10/20 Javascript
通过实例解析jQ Ajax操作相关原理
2020/09/23 Javascript
[46:23]完美世界DOTA2联赛PWL S2 FTD vs Magma 第一场 11.20
2020/11/23 DOTA
Win7下Python与Tensorflow-CPU版开发环境的安装与配置过程
2018/01/04 Python
windows下添加Python环境变量的方法汇总
2018/05/14 Python
Python使用sorted对字典的key或value排序
2018/11/15 Python
在django view中给form传入参数的例子
2019/07/19 Python
运用PyTorch动手搭建一个共享单车预测器
2019/08/06 Python
Python loguru日志库之高效输出控制台日志和日志记录
2020/03/07 Python
Python如何批量生成和调用变量
2020/11/21 Python
python实现双人五子棋(终端版)
2020/12/30 Python
雪花秀美国官方网站:韩国著名草本护肤化妆品品牌
2016/10/19 全球购物
2015年公司新年寄语
2014/12/08 职场文书
神农溪导游词
2015/02/11 职场文书
军训新闻稿范文
2015/07/17 职场文书