NCalcは、あなたがInt64
のように計算される数を強制することはできません整数データ型としてInt32
を使用しています。しかし、組み込み数学関数を使用せず、普通の算術演算子を使用する場合は、数字をlong
に変換し、正しい演算子を呼び出すことができます。のは、それを見てみましょう:(long)(int)args.EvaluateParameters()[0]
:
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]);
}
};
、あなたはConvert.ToInt64()
またはダブルキャストを使用する必要がありますが、直接Int64
に箱入りInt32
パラメータをキャストすることはできませんのでご注意ください。今、あなたは結果を確認することができますが正しいです:
var result = expr.Evaluate();
Console.WriteLine("Result is: {0} (type {1})",
result, result.GetType());
適切な型変換が行われ、その後、あなたはlong
にキャスト両方の値にする必要はありません。
あなたが直接(NCalcでdecimal
)を浮動小数点数を使用することができ、あなたがこのような問題を持っていません注:
var expr = new NCalc.Expression("1740263.0 * 1234.0");
ご協力ありがとうございます。それはたくさんの助けになりました。 – user2380829