• JS实现精确加减乘除


    说明:项目中要使用 JS 实现自动计算的功能,进行一些浮点数运算时,计算结果却是一长串的值,这里提供一个解决方法,问题基本上可以解决。

    具体代码如下:

     1 //加法函数
     2 function accAdd(arg1, arg2) {
     3     var r1, r2, m;
     4     try {
     5         r1 = arg1.toString().split(".")[1].length;
     6     }
     7     catch (e) {
     8         r1 = 0;
     9     }
    10     try {
    11         r2 = arg2.toString().split(".")[1].length;
    12     }
    13     catch (e) {
    14         r2 = 0;
    15     }
    16     m = Math.pow(10, Math.max(r1, r2));
    17     return (arg1 * m + arg2 * m) / m;
    18 } 
    19 //给Number类型增加一个add方法,,使用时直接用 .add 即可完成计算。 
    20 Number.prototype.add = function (arg) {
    21     return accAdd(arg, this);
    22 };
    23 
    24 
    25 //减法函数
    26 function Subtr(arg1, arg2) {
    27     var r1, r2, m, n;
    28     try {
    29         r1 = arg1.toString().split(".")[1].length;
    30     }
    31     catch (e) {
    32         r1 = 0;
    33     }
    34     try {
    35         r2 = arg2.toString().split(".")[1].length;
    36     }
    37     catch (e) {
    38         r2 = 0;
    39     }
    40     m = Math.pow(10, Math.max(r1, r2));
    41      //last modify by deeka
    42      //动态控制精度长度
    43     n = (r1 >= r2) ? r1 : r2;
    44     return ((arg1 * m - arg2 * m) / m).toFixed(n);
    45 }
    46 
    47 //给Number类型增加一个add方法,,使用时直接用 .sub 即可完成计算。 
    48 Number.prototype.sub = function (arg) {
    49     return Subtr(this, arg);
    50 };
    51 
    52 
    53 //乘法函数
    54 function accMul(arg1, arg2) {
    55     var m = 0, s1 = arg1.toString(), s2 = arg2.toString();
    56     try {
    57         m += s1.split(".")[1].length;
    58     }
    59     catch (e) {
    60     }
    61     try {
    62         m += s2.split(".")[1].length;
    63     }
    64     catch (e) {
    65     }
    66     return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m);
    67 } 
    68 //给Number类型增加一个mul方法,使用时直接用 .mul 即可完成计算。 
    69 Number.prototype.mul = function (arg) {
    70     return accMul(arg, this);
    71 }; 
    72 
    73 
    74 //除法函数
    75 function accDiv(arg1, arg2) {
    76     var t1 = 0, t2 = 0, r1, r2;
    77     try {
    78         t1 = arg1.toString().split(".")[1].length;
    79     }
    80     catch (e) {
    81     }
    82     try {
    83         t2 = arg2.toString().split(".")[1].length;
    84     }
    85     catch (e) {
    86     }
    87     with (Math) {
    88         r1 = Number(arg1.toString().replace(".", ""));
    89         r2 = Number(arg2.toString().replace(".", ""));
    90         return (r1 / r2) * pow(10, t2 - t1);
    91     }
    92 } 
    93 //给Number类型增加一个div方法,,使用时直接用 .div 即可完成计算。 
    94 Number.prototype.div = function (arg) {
    95     return accDiv(this, arg);
    96 }; 

    使用方法如下:

    1 //加法示例(其它的都类似)
    2 function calculate() {
    3     //数字1
    4     var num1 = 10;
    5     //数字2
    6     var num2 = 5;
    7     //计算 num1 + num2
    8     alert(num1.add(num2));
    9 }
    欢迎访问 JAVA技术分享 www.2b2b92b.com
  • 相关阅读:
    MySQL索引底层的实现
    mysql索引深入优化
    explain详解与索引最佳实践
    (MYSQL)回表查询原理,利用联合索引实现索引覆盖
    为什么重复值高的字段不能建索引(比如性别字段等)
    Spring的事务
    为什么要用Redis?Redis为什么这么快?
    spring AOP
    钩子教程
    钩子教程
  • 原文地址:https://www.cnblogs.com/zhoubang521/p/5199966.html
Copyright © 2020-2023  润新知