c# - C# dt.Compute() 在某些乘法上不能正常工作
问题描述
再会,
我在 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;
解决方案
好吧,你不能,Int32 最大大小为2,147,483,648 ,而你的乘法结果是2,500,000,000,它更大,会导致你得到的异常
您可以做的一个简单技巧是强制您的一个参数为非 int32 数字
像这样
string calculation = "500000*5000.0";
var anwser = dt.Compute(calculation, "");
这将导致
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 解析文字。
推荐阅读
- android - 错误:类型EventListener不带参数实现EventListener
{ - php - preg_replace 混淆
- spring-boot - Spring Boot JWT - 添加 BCrypt 安全性 - 拒绝访问
- python - 如何使用上下文管理器支持可选的标准输入/标准输出?
- php - CodeIgniter 过滤器
- c++ - C Windows API确定用户是否在一段时间内不活动
- sql-server - 如何操作数据集以从不同的表中获取信息?
- ios - 使用 Swift 在 MailCore2 中实现 MCOHTMLRendererIMAPDelegate
- scala - 在scala数据框中合并地图
- javascript - 将 html2pdf pdf 或 html2canvas 图像发送到电子邮件