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 相关文章推荐
精通JavaScript 纠正 cleanWhitespace函数
Mar 11 Javascript
JavaScript中document.forms[0]与getElementByName区别
Jan 21 Javascript
JavaScript 事件入门知识
Apr 13 Javascript
Bootstrap每天必学之js插件
Nov 30 Javascript
原生JS实现导航下拉菜单效果
Nov 25 Javascript
利用Angular.js编写公共提示模块的方法教程
May 28 Javascript
angular2实现统一的http请求头方法
Aug 13 Javascript
写一个Vue Popup组件
Feb 25 Javascript
微信小程序地图导航功能实现完整源代码附效果图(推荐)
Apr 28 Javascript
详解微信小程序之提高应用速度小技巧
Jan 07 Javascript
swiper实现导航滚动效果
Dec 13 Javascript
原生JS实现音乐播放器的示例代码
Feb 25 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
laravel + vue实现的数据统计绘图(今天、7天、30天数据)
2018/07/31 PHP
Javascript 类与静态类的实现(续)
2010/04/02 Javascript
借助javascript代码判断网页是静态还是伪静态
2014/05/05 Javascript
JsRender for object语法简介
2014/10/31 Javascript
javascript学习笔记之函数定义
2015/06/25 Javascript
jQuery实现鼠标经过购物车出现下拉框代码(推荐)
2016/07/21 Javascript
Input文本框随着输入内容多少自动延伸的实现
2017/02/15 Javascript
jQuery使用正则验证15/18身份证的方法示例
2017/04/27 jQuery
Vue的Flux框架之Vuex状态管理器
2017/07/30 Javascript
动态Axios的配置步骤详解
2018/01/12 Javascript
vue配置请求本地json数据的方法
2018/04/11 Javascript
react MPA 多页配置详解
2019/10/18 Javascript
JavaScript原型继承和原型链原理详解
2020/02/04 Javascript
三步搞定:Vue.js调用Android原生操作
2020/09/07 Javascript
详解Python的迭代器、生成器以及相关的itertools包
2015/04/02 Python
python中global用法实例分析
2015/04/30 Python
你眼中的Python大牛 应该都有这份书单
2017/10/31 Python
windows下python安装pip图文教程
2018/05/25 Python
PyTorch 对应点相乘、矩阵相乘实例
2019/12/27 Python
Python 序列化和反序列化库 MarshMallow 的用法实例代码
2020/02/25 Python
python中的selenium安装的步骤(浏览器自动化测试框架)
2020/03/17 Python
python实现无边框进度条的实例代码
2020/12/30 Python
纯CSS3打造属于自己的“小黄人”
2016/03/14 HTML / CSS
英国户外玩具儿童游乐设备网站:TP Toys(蹦床、攀爬框架、秋千、滑梯和游戏屋)
2018/04/09 全球购物
波兰珠宝品牌:YES
2019/08/09 全球购物
西班牙Polo衫品牌:Polo Club
2020/08/09 全球购物
Made in Design意大利:现代家具、名家灯具和装饰
2020/10/27 全球购物
个性大学生自我评价
2013/12/04 职场文书
中专生的个人自我评价
2013/12/11 职场文书
早读迟到检讨书
2014/01/24 职场文书
会计演讲稿范文
2014/05/23 职场文书
八项规定整改方案
2014/10/01 职场文书
乡镇一岗双责责任书
2015/01/29 职场文书
市场部经理岗位职责
2015/02/02 职场文书
在Python中如何使用yield
2021/06/07 Python
MySQL插入数据与查询数据
2022/03/25 MySQL