【问题标题】:Math.js Error: Cannot convert "abc" to a numberMath.js 错误:无法将“abc”转换为数字
【发布时间】:2019-07-11 00:57:25
【问题描述】:

我在反应中有一个 math.js 函数。它的作用是使用变量中的值评估公式,例如:

var variables = {'A': 1, 'B': 2}
var formula = 'A > 0 or B < 5'

math.evaluate(formula, variables) // this will return true

但是在比较字符串的时候,返回如下错误,

错误:无法将“abc”转换为数字

var variables = {'A': 'abc'}
var formula = 'A == "abc"'

math.evaluate(formula, variables) // this will return Error: Cannot convert "abc" to a number

谁能指导我如何做到这一点?我需要的是变量可以同时评估字符串和数字,谢谢。任何与此类似的问题也将不胜感激。我试图搜索,但找不到太多。

我尝试了以下方法,它不会覆盖该功能: https://github.com/josdejong/mathjs/issues/1051#issuecomment-369930811

更新 这就是我想要做的:

formula = ' A >= 2 and B == "year" '
variables = { A: 23, B: 'year' }
import { evaluate } from 'mathjs'

const MATH_EVAL = (formula, variables)=> {
  var result = evaluate(formula, variables)
  return result
}
export default MATH_EVAL

【问题讨论】:

  • 我认为您的问题在于第一个示例的变量 A 和 B 都是数字,而第二个示例有一个变量 A 是一个字符串。似乎evaluate 期望变量是数字,而不是字符串。
  • @Pyromonk 是的,我知道,但是有没有办法比较字符串和数字?
  • 您或许应该改写您的问题以表明这一点。
  • Uodated 这个问题。

标签: javascript reactjs math.js


【解决方案1】:

我有点困惑,因为这可以使用问题评论吗?可能是笔误?

var variables = {'A': 'abc'}
var formula = 'A == "abc"'
math.import({
  equal: function (a, b) { return a === b } 
}, {override: true})
console.log(math.evaluate(formula, variables))
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/mathjs/6.0.2/math.js"&gt;&lt;/script&gt;

【讨论】:

  • 我已经尝试过了,应用程序正在响应,我想这可能是一个问题?我已经打开了一个问题github.com/josdejong/mathjs/issues/1557 所有者也说在这种情况下它似乎不起作用。
【解决方案2】:

https://github.com/josdejong/mathjs/issues/1557

上述问题的答案在上述链接中。它说,我引用:

我为此创建了一个示例:examples/advanced/custom_relational_functions.js。你能看看它,看看它是否有意义并解决了你的问题?

主要区别在于,当您用新函数替换现有函数时,创建的函数不再更新它们的依赖关系。我必须再考虑一下,也许我们可以在使用 mathjs 实例(而不是纯函数)时完成这项工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-19
    • 2019-12-21
    • 1970-01-01
    • 2017-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多