NCalcInt32
用作整数数据类型,那么您不能强制将数字计算为Int64
. 但是,如果您不使用内置数学函数并且依赖于普通数学运算符,则可以将数字转换为long
,它将调用正确的运算符。让我们来看看它:
var expr = new NCalc.Expression("CLng(1740263) * 1234");
expr.EvaluateFunction += delegate(string name, NCalc.FunctionArgs args)
{
// Nostalgic CLng function...
if (String.Equals(name, "CLng", StringComparison.CurrentCultureIgnoreCase))
{
args.HasResult = true;
args.Result = Convert.ToInt64(args.EvaluateParameters()[0]);
}
};
请注意,您不能直接将 boxedInt32
参数转换为,Int64
然后您必须使用Convert.ToInt64()
或双重转换:(long)(int)args.EvaluateParameters()[0]
。现在您可以检查结果是否正确:
var result = expr.Evaluate();
Console.WriteLine("Result is: {0} (type {1})",
result, result.GetType());
执行正确的类型转换,然后您不需要将两个值都转换为long
.
请注意,您也可以直接使用浮点数(decimal
在 NCalc 中),您不会遇到这样的问题:
var expr = new NCalc.Expression("1740263.0 * 1234.0");