C#dt.Compute()在某些乘法上无法正常工作

时间:2019-03-06 13:31:26

标签: c# winforms datatable int

早安,

我在C#中的dt.Compute()有问题。

问题是,当我尝试计算类似的结果:500'000 * 5'000比我得到的结果:

  

System.OverflowException:“值太大或太小   代表“ int32”。”

结果应为:2'500'000'000,但c#得到此结果:-2146233066 那对于int32来说就太小了。

当我尝试计算5 * 5或5'000'000'000 * 5'000'000时有效,但是当我尝试计算5'000'000'000'000 * 5'000之类的功能时'000'000我收到此错误:

  

System.OverflowException:“值太大或太小   代表“ int64”。”

但是当我计算更大的数字时它再次起作用,这意味着dt.Compute()在将一些数字相乘时会遇到一些问题,但可以使用更大的数字或更小的数字。

希望有人可以帮助我解决这个问题。

这是我的代码:

string calculation = "500000*5000";
var anwser = dt.Compute(calculation, "");

string str_anwser = anwser.ToString();
RechnerOutput.Text = str_anwser;

1 个答案:

答案 0 :(得分:5)

好吧,Int32的最大大小是 2,147,483,648 并且您的乘法结果是 2,500,000,000 ,该结果更大,将导致您得到异常

您可以做的一个简单技巧就是强制其中一个参数为非int32数字

像这样

string calculation = "500000*5000.0";
var anwser = dt.Compute(calculation, "");

这将导致

  

2500000000.0

编辑:(如@PaulF所说)

数据集将尝试以升序(int32-> int64-> double)将它们自身解析为文字,而结果本身。 表示如果其中一个文字是int64(在 5000000000 * 5000000 的情况下),则结果可以解析为 Int64 ,但在第一种情况下的 50000 * 500000 这两个文字都是 Int32 ,因此结果将被视为

长版本来自MSDN

整数文字[+-]?[0-9] +被视为System.Int32,System.Int64或System.Double。 System.Double可能会失去精度,具体取决于数字的大小。例如,如果文字中的数字为2147483650,则DataSet将首先尝试将数字解析为Int32。由于数量太大,此操作将不会成功。在这种情况下,DataSet会将数字解析为Int64,它将成功。如果文字数大于Int64的最大值,则DataSet将使用Double解析文字。