gpt4 book ai didi

c# - NCalc 指定类型

转载 作者:行者123 更新时间:2023-11-30 12:23:32 29 4
gpt4 key购买 nike

我们有一个使用 Ncalc 计算字符串的通用计算例程。然而,当乘法中的值足够小以至于 Ncalc 将它们视为 int 但结果对于 int 来说太大时,我们遇到了一个问题。

例子:

        var expr = new NCalc.Expression("1740263 * 1234");
object result = expr.Evaluate();
Console.WriteLine(result.ToString());
Console.ReadKey();

这会导致负整数值。

有没有办法强制Ncalc使用long来计算?

我尝试过使用参数,这很有效,但这意味着要对我们的代码进行重大重写才能实现,我希望尽可能避免使用它。

谢谢

最佳答案

NCalc 使用 Int32 作为整数数据类型,那么您不能强制将数字计算为 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]);
}
};

请注意,您不能直接将装箱的Int32 参数转换为Int64,您必须使用Convert.ToInt64() 或double强制转换:(long)(int)args.EvaluateParameters()[0]。现在您可以检查结果是否正确:

var result = expr.Evaluate();
Console.WriteLine("Result is: {0} (type {1})",
result, result.GetType());

执行正确的类型转换后,您无需将两个值强制转换long

请注意,您也可以直接使用 float (NCalc 中的decimal),您不会有这样的问题:

var expr = new NCalc.Expression("1740263.0 * 1234.0");

关于c# - NCalc 指定类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36303206/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com