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 }
  • 相关阅读:
    深度优先和广度优先搜索
    宏定义
    C++11新特性之七——final/override控制
    __declspec的用法
    zedboard学习(1)OLED驱动显示图像
    python+NLTK 自然语言学习处理三:如何在nltk/matplotlib中的图片中显示中文
    流畅python学习笔记第十八章:使用asyncio编写服务器
    流畅python学习笔记第十八章:使用asyncio包处理并发(二)
    Django之博客系统:自定义认证
    Django之博客系统:用户注册和Profile
  • 原文地址:https://www.cnblogs.com/onlywu/p/14185186.html
Copyright © 2011-2022 走看看