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入门知识简介
Mar 04 Javascript
express的中间件bodyParser详解
Dec 04 Javascript
JavaScript中的ArrayBuffer详细介绍
Dec 08 Javascript
使用JQuery在线制作ppt并在线演示源码特效
Sep 08 Javascript
js如何实现淡入淡出效果
Nov 18 Javascript
基于jQuery实现中英文切换导航条效果
Sep 18 Javascript
js以分隔符分隔数组中的元素并转换为字符串的方法
Nov 16 Javascript
微信小程序 网络请求(GET请求)详解
Nov 16 Javascript
Django中使用jquery的ajax进行数据交互的实例代码
Oct 15 jQuery
Bootstrap 3多级下拉菜单实例
Nov 23 Javascript
使用typescript改造koa开发框架的实现
Feb 04 Javascript
uniapp开发小程序实现滑动页面控制元素的显示和隐藏效果
Dec 10 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 变量的定义方法
2010/01/26 PHP
使用新浪微博API的OAuth认证发布微博实例
2015/03/27 PHP
CodeIgniter常用知识点小结
2016/05/26 PHP
PHP多维数组排序array详解
2017/11/21 PHP
PHP实现数据四舍五入的方法小结【4种方法】
2019/03/27 PHP
laravel接管Dingo-api和默认的错误处理方式
2019/10/25 PHP
Avengerls vs KG BO3 第二场2.18
2021/03/10 DOTA
Highslide.js是一款基于js实现的网页中图片展示插件
2020/03/30 Javascript
Sample script that displays all of the users in a given SQL Server DB
2007/06/16 Javascript
Jquey拖拽控件Draggable使用方法(asp.net环境)
2010/09/28 Javascript
JS日期和时间选择控件升级版(自写)
2013/08/02 Javascript
以JSON形式将JS中Array对象数组传至后台的方法
2014/01/06 Javascript
JavaScript访问CSS属性的几种方式介绍
2014/07/21 Javascript
checkbox批量选中,获取选中项的值的简单实例
2016/06/28 Javascript
H5移动端适配 Flexible方案
2016/10/24 Javascript
Bootstrap警告框(Alert)插件使用方法
2017/03/21 Javascript
详解node如何让一个端口同时支持https与http
2017/07/04 Javascript
Mui使用jquery并且使用点击跳转新窗口的实例
2017/08/19 jQuery
微信小程序实现红包雨功能
2018/07/11 Javascript
nodejs更新package.json中的dependencies依赖到最新版本的方法
2018/10/10 NodeJs
微信小程序判断页面是否从其他页面返回的实例代码
2019/07/03 Javascript
javascript头像上传代码实例
2019/09/28 Javascript
layui table 复选框跳页后再回来保持原来选中的状态示例
2019/10/26 Javascript
js实现简单的贪吃蛇游戏
2020/04/23 Javascript
解决vue elementUI 使用el-select 时 change事件的触发问题
2020/11/17 Vue.js
HTML元素拖拽功能实现的完整实例
2020/12/04 Javascript
[02:40]DOTA2英雄基础教程 巨牙海民
2013/12/23 DOTA
python列表使用实现名字管理系统
2019/01/30 Python
python实现扫描局域网指定网段ip的方法
2019/04/16 Python
使用 Python 处理 JSON 格式的数据
2019/07/22 Python
Python字符串、列表、元组、字典、集合的补充实例详解
2019/12/20 Python
python输出pdf文档的实例
2020/02/13 Python
大学生毕业自我鉴定范文
2013/11/03 职场文书
培训主管岗位职责
2014/02/01 职场文书
用Python创建简易网站图文教程
2021/06/11 Python
源码解读Spring-Integration执行过程
2021/06/11 Java/Android