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 相关文章推荐
Firefox window.close()的使用注意事项
Apr 11 Javascript
php对mongodb的扩展(初识如故)
Nov 11 Javascript
JQuery拖拽元素改变大小尺寸实现代码
Dec 10 Javascript
indexOf 和 lastIndexOf 使用示例介绍
Sep 02 Javascript
JavaScript检测字符串中是否含有html标签实现方法
Jul 01 Javascript
jQuery加载及解析XML文件的方法实例分析
Jan 22 Javascript
AngularJS的ng-click传参的方法
Jun 19 Javascript
js实现canvas保存图片为png格式并下载到本地的方法
Aug 31 Javascript
JavaScript 中的 this 简单规则
Sep 19 Javascript
Bootstrap table使用方法汇总
Nov 17 Javascript
vue实现点击选中,其他的不选中方法
Sep 05 Javascript
vue 解决文本框被键盘遮住的问题
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读取CURL模拟登录时生成Cookie文件的方法
2014/11/04 PHP
PHP判断上传文件类型的解决办法
2015/10/20 PHP
php curl模拟post请求和提交多维数组的示例代码
2015/11/19 PHP
php原生导出excel文件的两种方法(推荐)
2016/11/19 PHP
PHP的mysqli_rollback()函数讲解
2019/01/23 PHP
使用js操作css实现js改变背景图片示例
2014/03/10 Javascript
jQuery ui 利用 datepicker插件实现开始日期(minDate)和结束日期(maxDate)
2014/05/22 Javascript
JavaScript数值转换的三种方式总结
2014/07/31 Javascript
AngularJS初始化过程分析(引导程序)
2014/12/06 Javascript
简述JavaScript中正则表达式的使用方法
2015/06/15 Javascript
js+div实现文字滚动和图片切换效果代码
2015/08/27 Javascript
JavaScript实现的伸展收缩型菜单代码
2015/10/14 Javascript
JavaScript中有关一个数组中最大值和最小值及它们的下表的输出的解决办法
2016/07/01 Javascript
Bootstrap框架结合jQuery仿百度换肤功能实例解析
2016/09/17 Javascript
BootStrap TreeView使用实例详解
2017/11/01 Javascript
解决Vue使用mint-ui loadmore实现上拉加载与下拉刷新出现一个页面使用多个上拉加载后冲突问题
2017/11/07 Javascript
JS交互点击WKWebView中的图片实现预览效果
2018/01/05 Javascript
基于nodejs res.end和res.send的区别
2018/05/14 NodeJs
Vue.js watch监视属性知识点总结
2019/11/11 Javascript
JavaScript实现密码强度实时验证
2020/03/18 Javascript
Node.js 中判断一个文件是否存在
2020/08/24 Javascript
浅谈Python实现贪心算法与活动安排问题
2017/12/19 Python
OpenCV+python手势识别框架和实例讲解
2018/08/03 Python
对Python 检查文件名是否规范的实例详解
2019/06/10 Python
Python vtk读取并显示dicom文件示例
2020/01/13 Python
Python实现SMTP邮件发送
2020/06/16 Python
python中判断数字是否为质数的实例讲解
2020/12/06 Python
python实现代码审查自动回复消息
2021/02/01 Python
土耳其风格手工珠宝:Ottoman Hands
2019/07/26 全球购物
特教教师先进事迹
2014/05/21 职场文书
大学计划书范文800字
2014/08/14 职场文书
反四风对照检查材料
2014/09/22 职场文书
财务审计整改报告
2014/11/06 职场文书
Python利器openpyxl之操作excel表格
2021/04/17 Python
源码解读Spring-Integration执行过程
2021/06/11 Java/Android
Python TypeError: ‘float‘ object is not subscriptable错误解决
2022/12/24 Python