js计算精度问题小结


Posted in Javascript onApril 22, 2013
//问题比如:7*0.8 JavaScript算出来就是:5.6000000000000005
            //加法函数,用来得到精确的加法结果
            //说明: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);
            }
            //如:
            var t1 = 6.60;
            var t2 = 1.32;
            var t3 = 1.2;
            var t4 = 1.2;
            var t5 = 1.2;
            alert(Number(t1).add(Number(t2)).add(Number(t3)).add(Number(t4)).add(Number(t5)));
            //减法函数,用来得到精确的减法结果
            function Subtr(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));
                //last modify by deeka
                //动态控制精度长度
                n = (r1 >= r2) ? r1 : r2;
                return ((arg1 * m - arg2 * m) / m).toFixed(n);
            }
            //乘法函数,用来得到精确的乘法结果
            //说明: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)
            }
            //用法:
            //给Number类型增加一个mul方法,调用起来更加方便。
            Number.prototype.mul = function (arg) {
                return accMul(arg, this);
            }
            //除法函数,用来得到精确的除法结果
            //说明: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 (r1 / r2) * pow(10, t2 - t1);
                }
            }
            //用法:
            //给Number类型增加一个div方法,调用起来更加方便。
Javascript 相关文章推荐
基于jquery的一行代码轻松实现拖动效果
Dec 28 Javascript
javascript实现的图片切割多块效果实例
May 07 Javascript
JavaScript对数组进行随机重排的方法
Jul 22 Javascript
javascript事件冒泡简单示例
Jun 20 Javascript
详解jquery easyui之datagrid使用参考
Dec 05 Javascript
canvas快速绘制圆形、三角形、矩形、多边形方法介绍
Dec 29 Javascript
js数字舍入误差以及解决方法(必看篇)
Feb 28 Javascript
jquery实现的table排序功能示例
Mar 10 Javascript
bootstrap响应式工具使用详解
Nov 29 Javascript
bootstrap-table.js扩展分页工具栏(增加跳转到xx页)功能
Dec 28 Javascript
javascript function(函数类型)使用与注意事项小结
Jun 10 Javascript
微信小程序自定义tabBar的踩坑实践记录
Nov 06 Javascript
基于javascipt-dom编程 table对象的使用
Apr 22 #Javascript
用js实现小球的自由移动代码
Apr 22 #Javascript
jquery打开直接跳到网页最下面、最低端实现代码
Apr 22 #Javascript
防止浏览器记住用户名及密码的简单实用方法
Apr 22 #Javascript
js播放wav文件(源码)
Apr 22 #Javascript
如何将一个String和多个String值进行比较思路分析
Apr 22 #Javascript
『JavaScript』限制Input只能输入数字实现思路及代码
Apr 22 #Javascript
You might like
PHP 图片水印类代码
2012/08/27 PHP
用php简单实现加减乘除计算器
2014/01/06 PHP
php实现当前页面点击下载文件的实例代码
2016/11/16 PHP
php获取用户真实IP和防刷机制的实例代码
2018/11/28 PHP
JavaScript XML操作 封装类
2009/07/01 Javascript
Firefox+FireBug使JQuery的学习更加轻松愉快
2010/01/01 Javascript
node中socket.io的事件使用详解
2014/12/15 Javascript
node.js中的fs.createReadStream方法使用说明
2014/12/17 Javascript
JS版元素周期表实现方法
2015/08/05 Javascript
jQuery实现表单步骤流程导航代码分享
2015/08/28 Javascript
JS实现兼容各种浏览器的获取选择文本的方法【测试可用】
2016/06/21 Javascript
使用bootstrap实现多窗口和拖动效果
2016/09/22 Javascript
基于Bootstrap模态对话框只加载一次 remote 数据的解决方法
2017/07/09 Javascript
Vue v2.4中新增的$attrs及$listeners属性使用教程
2018/01/08 Javascript
JS 数组随机洗牌的实例代码
2018/09/12 Javascript
ajaxfileupload.js实现上传文件功能
2019/04/19 Javascript
微信小程序-form表单提交代码实例
2019/04/29 Javascript
js获取 gif 的帧数的代码实例
2019/09/10 Javascript
js实现弹幕飞机效果
2020/08/27 Javascript
js实现筛选功能
2020/11/24 Javascript
itchat和matplotlib的结合使用爬取微信信息的实例
2017/08/25 Python
Python文本特征抽取与向量化算法学习
2017/12/22 Python
Python+OpenCV感兴趣区域ROI提取方法
2019/01/10 Python
python3对拉勾数据进行可视化分析的方法详解
2019/04/03 Python
Puppeteer使用示例详解
2019/06/20 Python
Python猫眼电影最近上映的电影票房信息
2020/09/18 Python
Mio Skincare美国官网:身体紧致及孕期身体护理
2017/03/05 全球购物
市场安全管理制度
2014/01/26 职场文书
毕业生个人求职自荐信
2014/02/26 职场文书
工程承诺书怎么写
2014/05/24 职场文书
教师个人读书活动总结
2014/07/08 职场文书
暑假安全教育广播稿
2014/09/10 职场文书
党员学习群众路线教育实践活动对照检查材料
2014/09/23 职场文书
高中班主任培训心得体会
2016/01/07 职场文书
php 解析非标准json、非规范json
2021/04/01 PHP
mysql如何能有效防止删库跑路
2021/10/05 MySQL