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 相关文章推荐
限制文本字节数js代码
Mar 06 Javascript
cnblogs中在闪存中屏蔽某人的实现代码
Nov 14 Javascript
AngularJS的表单使用详解
Jun 17 Javascript
JS快速实现移动端拼图游戏
Sep 05 Javascript
arcgis for js 修改infowindow样式的方法
Nov 02 Javascript
详解Vue.js动态绑定class
Dec 20 Javascript
Vue.js基础知识小结
Jan 13 Javascript
微信小程序 数据绑定及运算的简单实例
Sep 20 Javascript
JQ图片文件上传之前预览功能的简单实例(分享)
Nov 12 Javascript
Vue前后端不同端口的实现方法
Sep 19 Javascript
js+html5 canvas实现ps钢笔抠图
Apr 28 Javascript
微信小程序利用云函数获取手机号码
Dec 17 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 xml文件操作代码(一)
2009/03/20 PHP
30 个很棒的PHP开源CMS内容管理系统小结
2011/10/14 PHP
PHP写的加密函数,支持私人密钥(详细介绍)
2013/06/09 PHP
php修改NetBeans默认字体的大小
2013/07/02 PHP
php自定义函数实现统计中文字符串长度的方法小结
2017/04/15 PHP
javascript 避免闭包引发的问题
2009/03/17 Javascript
javascript函数重载解决方案分享
2014/02/19 Javascript
详解JavaScript中getFullYear()方法的使用
2015/06/10 Javascript
以jQuery中$.Deferred对象为例讲解promise对象是如何处理异步问题
2015/11/13 Javascript
jQuery事件绑定on()与弹窗实现代码
2016/04/28 Javascript
jquery获取form表单input元素值的简单实例
2016/05/30 Javascript
jQuery鼠标悬停内容动画切换效果
2017/04/27 jQuery
Angular.Js中ng-include指令的使用与实现
2017/05/07 Javascript
node文件上传功能简易实现代码
2017/06/16 Javascript
js学习总结_基于数据类型检测的四种方式(必看)
2017/07/04 Javascript
详解JS数组Reduce()方法详解及高级技巧
2017/08/18 Javascript
node前端开发模板引擎Jade的入门
2018/05/11 Javascript
浅谈Angular6的服务和依赖注入
2018/06/27 Javascript
实例分析Array.from(arr)与[...arr]到底有何不同
2019/04/09 Javascript
JQuery获取可视区尺寸和文档尺寸及制作悬浮菜单示例
2019/05/14 jQuery
微信小程序点击item使之滚动到屏幕中间位置
2020/03/25 Javascript
Python使用PIL库实现验证码图片的方法
2016/03/11 Python
python cx_Oracle的基础使用方法(连接和增删改查)
2017/11/19 Python
python绘制圆柱体的方法
2018/07/02 Python
python3通过selenium爬虫获取到dj商品的实例代码
2019/04/25 Python
Django的性能优化实现解析
2019/07/30 Python
np.dot()函数的用法详解
2020/01/17 Python
Python爬虫爬取、解析数据操作示例
2020/03/27 Python
移动端解决悬浮层(悬浮header、footer)会遮挡住内容的3种方法
2015/03/27 HTML / CSS
台湾饭店和机票预订网站:Expedia台湾
2016/08/05 全球购物
法国足球商店:Footcenter
2019/07/06 全球购物
Ben Sherman官方网站:英国男装品牌
2019/10/22 全球购物
现代绅士日常奢侈品:Todd Snyder
2019/12/13 全球购物
产品质量承诺书范文
2014/03/27 职场文书
python numpy中setdiff1d的用法说明
2021/04/22 Python
Win11应用商店打开闪退怎么解决? win11应用商店打不开的多种解决办法
2022/04/05 数码科技