【发布时间】:2019-03-06 13:31:26
【问题描述】:
美好的一天,
我在 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;
【问题讨论】:
-
通过读取documentation - 解析器根据表达式中的最大值猜测所需的数据大小(Int32/Int64)。当 Int64 太大时,将使用 Double。我猜所使用的数据类型是基于输入值而不是结果。