问题:浮点数计算精度问题解决(字符串形式比较)

//字符串形式比较
  let num = "return 19726.94 == 4561.33+15165.61"

  //获取字符串中的数字
  extractNumber(str) {
    // 匹配整数、小数、正负号
    const regex = /-?\d+(\.\d+)?/g;
    // 匹配结果
    const matches = str.match(regex) || [];
    // 返回匹配到的数字数组
    return matches.map(Number);
  }

  //获取数字数组中最大的小数位数,用于扩大的倍数,使整个比较式中的数字全为整数
  getMaxDecimalPlaces(numbers) {
    let maxPlaces = 0;
    for (let i = 0; i < numbers.length; i++) {
      const num = numbers[i];
      const decimalPlaces = (num % 1 !== 0) ? num.toString().split('.')[1].length : 0;
      if (decimalPlaces > maxPlaces) {
        maxPlaces = decimalPlaces;
      }
    }
    return maxPlaces;
  }

  //对字符串中的数字进行操作,将字符串中的数字进行替换,其中modifyNumber为一个方法
  modifyNumbersInString(str, modifyNumber) {
    // 正则表达式匹配整数和小数
    const numberRegex = /-?\d+(\.\d+)?/g;
    
    // 替换函数,用于修改匹配到的数字
    const replaceNumber = (match) => {
      const num = parseFloat(match);
      return modifyNumber(num).toString();
    };
    
    // 替换字符串中的数字
    return str.replace(numberRegex, replaceNumber);
  }
  //使用
  let vals = this.extractNumber(num)
  let maxPlaces = this.getMaxDecimalPlaces(vals);
  let result = this.modifyNumbersInString(matchExpression, (num) => (num * pow).toFixed(2));
  //执行字符串中的表达式
  var func = new Function(result);
  let check_result = func();
  console.log(check_result)
posted @ 2024-05-24 10:56  Code_Lzh  阅读(19)  评论(0)    收藏  举报