zoukankan      html  css  js  c++  java
  • js计算精度

     1 /**
     2  * 解决两个数相加精度丢失问题
     3  * @param a
     4  * @param b
     5  * @returns {Number}
     6  */
     7 function floatAdd(a, b) {
     8     var c, d, e;
     9     if(undefined==a||null==a||""==a||isNaN(a)){a=0;}
    10     if(undefined==b||null==b||""==b||isNaN(b)){b=0;}
    11     try {
    12         c = a.toString().split(".")[1].length;
    13     } catch (f) {
    14         c = 0;
    15     }
    16     try {
    17         d = b.toString().split(".")[1].length;
    18     } catch (f) {
    19         d = 0;
    20     }
    21     e = Math.pow(10, Math.max(c, d));
    22     return  (floatMul(a, e) + floatMul(b, e)) / e;
    23 }
    24 /**
    25  * 解决两个数相减精度丢失问题
    26  * @param a
    27  * @param b
    28  * @returns {Number}
    29  */
    30 function floatSub(a, b) {
    31     var c, d, e;
    32     if(undefined==a||null==a||""==a||isNaN(a)){a=0;}
    33     if(undefined==b||null==b||""==b||isNaN(b)){b=0;}
    34     try {
    35         c = a.toString().split(".")[1].length;
    36     } catch (f) {
    37         c = 0;
    38     }
    39     try {
    40         d = b.toString().split(".")[1].length;
    41     } catch (f) {
    42         d = 0;
    43     }
    44     e = Math.pow(10, Math.max(c, d));
    45     return (floatMul(a, e) - floatMul(b, e)) / e;
    46 }
    47 /**
    48  * 解决两个数相乘精度丢失问题
    49  * @param a
    50  * @param b
    51  * @returns {Number}
    52  */
    53 function floatMul(a, b) {
    54     var c = 0,
    55         d = a.toString(),
    56         e = b.toString();
    57     try {
    58         c += d.split(".")[1].length;
    59     } catch (f) {}
    60     try {
    61         c += e.split(".")[1].length;
    62     } catch (f) {}
    63     return Number(d.replace(".", "")) * Number(e.replace(".", "")) / Math.pow(10, c);
    64 }
    65 /**
    66  * 解决两个数相除精度丢失问题
    67  * @param a
    68  * @param b
    69  * @returns
    70  */
    71 function floatDiv(a, b) {
    72     var c, d, e = 0,
    73         f = 0;
    74     try {
    75         e = a.toString().split(".")[1].length;
    76     } catch (g) {}
    77     try {
    78         f = b.toString().split(".")[1].length;
    79     } catch (g) {}
    80     return c = Number(a.toString().replace(".", "")), d = Number(b.toString().replace(".", "")), floatMul(c / d, Math.pow(10, f - e));
    81 }
  • 相关阅读:
    实现一个最简单的flask应用程序
    python常识
    Flex布局
    ES6的promise的学习
    通过正则获取url参数
    dom0级事件和dom2级事件
    sea.js总结
    跨域的几种方式
    人生苦短,生命也就一次,机会也就一次
    新开的博客先和大家打个招呼吧!
  • 原文地址:https://www.cnblogs.com/onlywu/p/14185186.html
Copyright © 2011-2022 走看看