js计算精度问题小结

时间:2024-04-10 13:55:24 


//问题比如: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方法,调用起来更加方便。


标签:js,精度
0
投稿

猜你喜欢

  • Scrapy-redis爬虫分布式爬取的分析和实现

    2023-01-04 10:21:19
  • ASP 根据用户权限判断显示的列标题

    2011-03-29 11:01:00
  • python提效小工具之统计xmind用例数量(源码)

    2021-11-26 21:42:44
  • Python plt 利用subplot 实现在一张画布同时画多张图

    2021-02-04 02:50:17
  • Mysql 数据库结构及索引类型

    2024-01-20 23:40:35
  • Python实现随机生成手机号及正则验证手机号的方法

    2021-05-30 01:41:27
  • Jupyter Notebook添加代码自动补全功能的实现

    2021-01-07 07:31:12
  • python中zip()函数遍历多个列表方法

    2022-03-09 21:40:00
  • MySQL InnoDB中的锁机制深入讲解

    2024-01-13 14:41:40
  • 浅谈Python中用datetime包进行对时间的一些操作

    2022-09-27 09:32:14
  • python删除服务器文件代码示例

    2023-07-26 15:44:08
  • golang基于websocket实现的简易聊天室程序

    2023-06-15 00:27:01
  • Python爬取你好李焕英豆瓣短评生成词云的示例代码

    2021-04-06 12:13:21
  • ASP 正则表达式常用的几种方法(execute、test、replace)

    2010-03-02 20:23:00
  • python的简单四则运算语法树可视化

    2023-08-16 09:22:37
  • python引用DLL文件的方法

    2021-01-17 03:35:19
  • JS与jQuery判断文本框还剩多少字符可以输入的方法

    2024-04-25 13:07:20
  • 在Ubuntu或Debian系统的服务器上卸载MySQL的方法

    2024-01-25 17:24:55
  • 深入解析Python中的WSGI接口

    2021-02-03 01:22:14
  • SQLSERVER 中datetime 和 smalldatetime类型分析说明

    2024-01-23 23:36:13
  • asp之家 网络编程 m.aspxhome.com