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

Stö*_*her 1 c# int datatable winforms

美好的一天,

我在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;
Run Code Online (Sandbox Code Playgroud)

sty*_*tyx 5

好吧,你做不到,Int32的最大大小为2147483648, 而乘法结果为2500000000,这会更大,并且会导致异常

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

像这样

string calculation = "500000*5000.0";
var anwser = dt.Compute(calculation, "");
Run Code Online (Sandbox Code Playgroud)

这将导致

2500000000.0

编辑:(如@PaulF所说)

dataSet将尝试以升序(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解析文字。