【问题标题】:Get distinct products of a sum-of-products expression mathjs/js获取乘积之和表达式 mathjs/js 的不同乘积
【发布时间】:2020-07-08 13:58:47
【问题描述】:

有没有一种方法可以使用 Mathjs 或其他一些 js lib 甚至 plainjs 来获得 sum-of-products 表达式的不同产品? F.e 将此表达式作为字符串给出:

7.30*7.40-2.10*1.30+8.10*(2.70+0.60+4.70)+0.30*0.60+ 1.60*0.70+2.95*2.65+6.00*5.80

该函数应该只执行乘法并返回不同乘积的不同和。

结果应该是: 54.02 - 2.73 + 64.8 + 0.18...

它应该尊重父母。

【问题讨论】:

    标签: javascript mathjs


    【解决方案1】:

    let str = "7.30*7.40-2.10*1.30+8.10*(2.70+0.60+4.70)+0.30*0.60+ 1.60*0.70+2.95*2.65+6.00*5.80"
    
    let strArr = str.split("*")
    
    let parsedParenthesis = strArr.map(expression => {
      if (!isNaN(expression))
        return expression
      let regex = /\(([^()]+)\)/g
      if (regex.test(expression)) {
        let matched = (expression.match(regex))[0]
        let exp = matched.split(/[\(\)]/)[1]
        let evaluatedExp = math.evaluate(exp) //if using mathjs
        expression = expression.replace(matched, evaluatedExp)
      }
      return expression
    })
    let finalString = parsedParenthesis.join("*")
    let multiplyArr = finalString.match(/(\d+\.?\d*\*\d+\.?\d*)/g)
    multiplyArr.map(exp => {
      let evaluatedExp = Math.round((math.evaluate(exp) + Number.EPSILON) * 100) / 100 //if using mathjs
      finalString = finalString.replace(exp, evaluatedExp)
    })
    console.log(finalString)
    <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjs/7.0.2/math.js"></script>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-28
      • 1970-01-01
      相关资源
      最近更新 更多