在 C# 中计算字符串

Calculating a String in C#

我想使用 NCalc 或 DynamicExpresso 库在 C# 中计算一个字符串,问题是,当计算变得复杂且数字很大时,return 是错误的结果。 例如下面的代码 returns -808182895 当它应该 return 3486784401

string value = "387420489*9";
value = new Interpreter().Eval(value).ToString();

我做错了什么吗? 感谢您的帮助。

尝试以下操作:

(long)387420489 * (long)9

Dynamic Expresso 有一个网站 shell,您可以在此处测试表达式;

http://dynamic-expresso.azurewebsites.net/

在这个网站上测试时 shell,我意识到了这一点;

 387420489L * 9 => Syntax error (at index 9). => does not accept type suffix
 (long)387420489 * 9 => -808182895 => overflow
 387420489 * (long)9 => 3486784401 => OK

 2147483647 + 1 => -2147483648 => int.MaxValue + 1 = int.MinValue (overflow)
 2147483648 + 1 => 2147483649 => When does not fit into Int32, interpreted as long

虽然其中大部分可以被视为设计使然(考虑到 Dynamic Expresso 如何评估语句),但仍有进一步改进的空间。

例如 Javascript。

387420489*9 => 3486784401

问题是,我们需要的是什么

  1. 正确执行给定的算术表达式,正如我们和最终用户所期望的那样,
  2. 以 C# 方式执行给定的算术表达式?

我认为是前者。