mXparser Agument十进制值异常

时间:2018-05-08 21:19:59

标签: c#

所以我在尝试使用十进制值设置mXparser Argument时遇到问题。

        public void SetArguments(List<decimal> argumentsValues)
    {
        _x = new List<Argument>();
        var argsNumber = argumentsValues.Count;
        for (int i = 1; i < argsNumber + 1; i++)
            _x.Add(new Argument("x" + i + "=" + argumentsValues[i-1]));

        if (argsNumber == 1)
        {
            _expression = new Expression(_base, f, _x[0]);
        }
        if(argsNumber==2)
        {
            _expression = new Expression(_base, f, _x[0], _x[1]);

以下是我的功能示例。 _x [0]显示为0另一个是当我计算表达式并尝试将结果转换为十进制时,我得到OverflowException(因为我试图将NaN转换为十进制)。我真的需要将float值传递给函数参数。

2 个答案:

答案 0 :(得分:1)

固定。这是改变

_x.Add(new Argument("x" + i + "=" + argumentsValues[i-1]));

_x.Add(new Argument("x" + i, argumentsValues[i-1]));

答案 1 :(得分:0)

你试图使用&#34;自然语言&#34;构造函数,即

Argument x = new Argument("x = 5");
Argument x = new Argument("x = 2*2 + sin(pi/2)");

非常方便,但需要额外的解析,并且在您拥有参数名称和参数值时不是最佳的。更优化(性能和一些特殊情况)

Argument x = new Argument("x", 5);

请参阅API规范中给出的Argument构造函数列表 http://mathparser.org/api/org/mariuszgromada/math/mxparser/Argument.html

并查看与用户定义的参数相关的教程部分 http://mathparser.org/mxparser-tutorial/user-defined-arguments/

您将看到不同的参数类型(包括依赖参数)+不同构造函数的使用。

祝你好运