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 相关文章推荐
xheditor与validate插件冲突的解决方案
Apr 15 Javascript
SharePoint 客户端对象模型 (一) ECMA Script
May 22 Javascript
SeaJS入门教程系列之使用SeaJS(二)
Mar 03 Javascript
BootStrap轻松实现微信页面开发代码分享
Oct 21 Javascript
JS制作适用于手机和电脑的通知信息效果
Oct 28 Javascript
利用D3.js实现最简单的柱状图示例代码
Dec 09 Javascript
AngularJs ng-change事件/指令的用法小结
Nov 01 Javascript
vue初尝试--项目结构(推荐)
Jan 30 Javascript
JS设计模式之观察者模式实现实时改变页面中金额数的方法
Feb 05 Javascript
javascript的this关键字详解
May 20 Javascript
Vue+Typescript中在Vue上挂载axios使用时报错问题
Aug 07 Javascript
js实现时间日期校验
May 26 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
一个可以删除字符串中HTML标记的PHP函数
2006/10/09 PHP
php设计模式 Chain Of Responsibility (职责链模式)
2011/06/26 PHP
PHP中extract()函数的妙用分析
2012/07/11 PHP
phpphp图片采集后按原路径保存图片示例
2014/02/18 PHP
php实现的验证码文件类实例
2015/06/18 PHP
PHP函数nl2br()与自定义函数nl2p()换行用法分析
2016/04/02 PHP
Laravel Eloquent ORM 实现查询表中指定的字段
2019/10/17 PHP
laravel 框架结合关联查询 when()用法分析
2019/11/22 PHP
PhpStorm2020.1 安装 debug - Postman 调用的详细教程
2020/08/17 PHP
JavaScript 闭包深入理解(closure)
2009/05/27 Javascript
Jquery树插件zTree用法入门教程
2015/02/17 Javascript
js面向对象编程总结
2017/02/16 Javascript
vue多页面开发和打包正确处理方法
2018/04/20 Javascript
Vuex,iView UI面包屑导航使用扩展详解
2019/11/04 Javascript
js仿淘宝放大镜效果
2020/12/28 Javascript
python处理图片之PIL模块简单使用方法
2015/05/11 Python
python 计算两个日期相差多少个月实例代码
2017/05/24 Python
深入理解Django的自定义过滤器
2017/10/17 Python
pandas DataFrame实现几列数据合并成为新的一列方法
2018/06/08 Python
pandas中的series数据类型详解
2019/07/06 Python
Python下应用opencv 实现人脸检测功能
2019/10/24 Python
Django实现CAS+OAuth2的方法示例
2019/10/30 Python
Pytorch使用MNIST数据集实现CGAN和生成指定的数字方式
2020/01/10 Python
python中tkinter窗口位置\坐标\大小等实现示例
2020/07/09 Python
python 实现关联规则算法Apriori的示例
2020/09/30 Python
css3绘制百度的小度熊
2018/10/29 HTML / CSS
使用CSS3的appearance属性改变任何元素的浏览器默认风格
2012/12/24 HTML / CSS
法拉利英国精品店:Ferraris Boutique UK
2019/07/20 全球购物
一家专门经营包包的英国网站:MyBag
2019/09/08 全球购物
纪念建党演讲稿范文
2014/01/13 职场文书
护士辞职信范文
2014/01/19 职场文书
会计电算化个人求职信范文
2014/01/24 职场文书
教师绩效工资方案
2014/02/01 职场文书
入党推优材料
2014/06/02 职场文书
庆六一活动总结
2014/08/29 职场文书
民事二审代理词
2015/05/25 职场文书