美文网首页
js精确计算加减乘除

js精确计算加减乘除

作者: 海豚先生的博客 | 来源:发表于2024-02-20 11:39 被阅读0次

自定义方法

const exactNumber = {
  /**
   * 求和
   */
  sum: function accAdd(num1: number, num2: number) {
    let r1; let r2; let
      m;
    try {
      r1 = num1.toString().split('.')[1].length;
    } catch (e) {
      r1 = 0;
    }
    try {
      r2 = num2.toString().split(".")[1].length;
    } catch (e) {
      r2 = 0;
    }
    m = Math.pow(10, Math.max(r1, r2)); // pow() 方法可返回 x 的 y 次幂的值。
    // return (num1*m+num2*m)/m;
    return Math.round(num1 * m + num2 * m) / m; // round() 方法可把一个数字舍入为最接近的整数。然后除以10的N次方
  },
  /**
   * 求差
   */
  sub: function accSub(arg1: number, arg2: number) {
    let r1; let r2; let m; let
      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 Number(((arg1 * m - arg2 * m) / m).toFixed(n));
  },
  /**
   * 求积
   */
  pro: function accMul(arg1: number, arg2: number, decimal?: number) {
    let m = 0;
    const s1 = arg1.toString();
    const s2 = arg2.toString();
    try {
      m += s1.split(".")[1].length
    } catch (e) { }
    try {
      m += s2.split(".")[1].length
    } catch (e) { }
    let result = Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m); // pow() 方法可返回 x 的 y 次幂的值
    if (decimal || decimal === 0) {
      result = Number(result.toFixed(decimal));
    }
    return result
  },
  /**
   * 求商
   */
  quo: function accDiv(arg1: number, arg2: number, decimal?: | number) {
    let t1 = 0;
    let t2 = 0;
    let r1; let
      r2;
    try {
      t1 = arg1.toString().split(".")[1].length
    } catch (e) { }
    try {
      t2 = arg2.toString().split(".")[1].length
    } catch (e) { }

    r1 = Number(arg1.toString().replace(".", ""))
    r2 = Number(arg2.toString().replace(".", ""))
    //        return (r1/r2)*pow(10,t2-t1); //改变这一句,这里相当于又是乘法了 so改变一下
    let result = this.pro(r1 / r2, Math.pow(10, t2 - t1)) // 调取乘法函数
    if (decimal || decimal === 0) {
      result = Number(result.toFixed(decimal));
    }
    return result;
  }
}

export default exactNumber;

第三方库decimal.js

相关文章

  • JS精确计算

  • JS中的加减乘除法

    js的算法莫名其妙就会计算不准,下面是计算加减乘除的万能公式:

  • JS浮点数计算精度

    JS的浮点数,计算都是会有问题的。下面给出加减乘除的解决办法 131.20*100 = 13119.999999 ...

  • js计算年龄(精确至秒)

    ps:注意传入生日月份时要减1

  • 精确计算

    陈军每天晚上都喜欢去家附近的城中公园散散步。伴随着人到中年,陈军感觉到自己最近两年长胖了许多,特别是一个啤酒肚,许...

  • 用js计算年龄(精确到天)

    需求:需要实现 1岁2月3天这样的格式 方法: 此方法参考了: https://llyilo.iteye.com/...

  • 个人代码库-待更新

    JS 浮点数相加不精确解决 浮点数取两位小数 css 内计算 input 按钮美化(input 上传框美化实例)

  • Js 计算不精确的问题(使用math.js)

    最近在做一个小系统,里面包含了价格的运算,由于整个系统都是后台页面,所以第一时间的想法就是在后台运算,然后把结果返...

  • Java精确计算

    在java.math 的包中有3个class,在这我只举BigInteger的例子 BigDecimal 不可变的...

  • decimal精确计算

    关系型数据库mysql中,存储10.00这个值,若以float类型存储,是10.0,若以int类型存储,是1...

网友评论

      本文标题:js精确计算加减乘除

      本文链接:https://www.haomeiwen.com/subject/atebadtx.html