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 }
  • 相关阅读:
    Luogu P2016 战略游戏(树形DP)
    Luogu P2486 染色(树链剖分+线段树)
    Luogu P3178 树上操作(树链剖分+线段树)
    Luogu P2590 树的统计(树链剖分+线段树)
    Luogu P2146 软件包管理器(树链剖分+线段树)
    获得spring
    网卡绑定多个ip
    描述01-配置文件咋整
    进程查看
    端口查看,进程杀死
  • 原文地址:https://www.cnblogs.com/onlywu/p/14185186.html
Copyright © 2011-2022 走看看