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

      js 计算有时会因为精度问题而得不准确的值,当次遇到的是乘法问题

      计算器的值则为:

      贴个代码防止以后再用:

      其他计算方法也一并加一下:

      /** 四则运算: 加 */
      public static add(arg1: number, arg2: number): number {
        const i1 = FormatHelper.toInteger(arg1),
          i2 = FormatHelper.toInteger(arg2);
        let result;
        if (i1.times > i2.times) {
          result = (i1.num + i2.num * (i1.times / i2.times)) / i1.times;
        }else {
          result = (i1.num * (i2.times / i1.times) + i2.num) / i2.times;
        }
        return result;
      }
    
      /** 四则运算: 减 */
      public static subtract(arg1: number, arg2: number): number {
        const i1 = FormatHelper.toInteger(arg1),
          i2 = FormatHelper.toInteger(arg2);
        let result;
        if (i1.times > i2.times) {
          result = (i1.num - i2.num * (i1.times / i2.times)) / i1.times;
        }else {
          result = (i1.num * (i2.times / i1.times) - i2.num) / i2.times;
        }
        return result;
      }
    
      /** 四则运算: 乘 */
      public static multiply(arg1: number, arg2: number): number {
        let m = 0;
        const s1 = arg1.toString(), s2 = arg2.toString();
        try {
          m += s1.split('.')[1].length;
        } catch (e) { }
        try {
          m += s2.split('.')[1].length;
        } catch (e) { }
        return Number(s1.replace('.', '')) * Number(s2.replace('.', '')) / Math.pow(10, m);
      }
    
      /** 四则运算: 除 */
      public static divide(arg1: number, arg2: number, dec: number): number {
        let t1 = 0, t2 = 0, r1, 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 round(FormatHelper.multiply((r1 / r2), Math.pow(10, t2 - t1)), dec);
      }
  • 相关阅读:
    职场之道
    AlphaBlend
    感动前行——给医学媳妇写的演讲稿(非IT类)
    高等数学积分公式大全
    分析Model2系统心得
    【软考】(六)关系代数
    飞鸽传书官方站点 创立黑马程序猿训练营
    实现简单的二级级联
    const和readonly差别
    Chord算法(原理)
  • 原文地址:https://www.cnblogs.com/guofan/p/15034886.html
Copyright © 2011-2022 走看看