Vb.net 值对于类型';太大或太小;int32';仅使用乘法

Vb.net 值对于类型';太大或太小;int32';仅使用乘法,vb.net,Vb.net,我在这个主题中查看了很多主题,我知道这个错误是因为这个过程涉及的数字比int32支持的要大 但在我的项目中,除乘法外,其余3个过程都成功完成(加减除法) 例如,像9999999999这样的大数字可以用前面提到的3个进程来处理,但如果相乘,就会产生标题中提到的错误 我正在使用datatable.compute,这是我的代码: 试试看 将myvalue设置为字符串=CalculatorText.Text Dim calc作为新数据表() Dim结果=CType(计算(myvalue,无),双精度)

我在这个主题中查看了很多主题,我知道这个错误是因为这个过程涉及的数字比int32支持的要大

但在我的项目中,除乘法外,其余3个过程都成功完成(加减除法)

例如,像9999999999这样的大数字可以用前面提到的3个进程来处理,但如果相乘,就会产生标题中提到的错误

我正在使用datatable.compute,这是我的代码:

试试看
将myvalue设置为字符串=CalculatorText.Text
Dim calc作为新数据表()
Dim结果=CType(计算(myvalue,无),双精度)
CalculatorResult.Text=结果
特例
MsgBox(例如消息)
结束尝试
编辑: 我正在使用datatable.compute计算多个进程 e、 g.(13+656-54*65/45),写在文本框(calcultorText)中

当我尝试将相对较小的数字相乘时,会出现以下错误:

虽然有大量的数据,但没有任何问题:


我有一个答案给你。首先,你的用法是无效的。这是滥用机会。然而,这一次毫无意义。您已经创建了一个没有任何列的表。然后调用
Compute
,在这里传递一些任意的数学运算。即使我不知道
myvalue
中有什么,我也可以想象,类似这样的
9999999*9999999
。为什么呢

Dim calc作为新数据表()
Dim结果=CType(计算(myvalue,无),双精度)
Compute
方法是针对某些表操作执行的,如下所示

公共共享子主目录()
Dim t=新数据表(“x”)
t、 Columns.Add(“c1”,GetType(整数))
t、 Rows.Add(Integer.MaxValue)
t、 Rows.Add(Integer.MaxValue)
“错!但将列类型替换为GetType(double)并起作用
Dim res=t.Compute(“和(c1)*99999999”,无)
控制台写入线(res)
端接头
如上所述,如果定义了一个包含容纳数据类型的列,则可以使用大量数值输出计算数学表达式。但您所做的不是计算表表达式,而是在错误的应用程序中使用了
DataTable
功能

您可能应该编写一个解析器,只需将值加载到变量中,就可以执行
x+y
。其实,

这可能是一个小小的解决办法

t.Columns.Add(“c1”,GetType(double))'定义一个列
t、 行。添加(1)'将“1”添加到一行
'并将表达式乘以1作为求和的结果,始终
Dim res As Double=CType(t.Compute(“和(c1)*9999999999999*9999999”,无),双精度)

那就行了,我有个答案给你。首先,你的用法是无效的。这是滥用机会。然而,这一次毫无意义。您已经创建了一个没有任何列的表。然后调用
Compute
,在这里传递一些任意的数学运算。即使我不知道
myvalue
中有什么,我也可以想象,类似这样的
9999999*9999999
。为什么呢

Dim calc作为新数据表()
Dim结果=CType(计算(myvalue,无),双精度)
Compute
方法是针对某些表操作执行的,如下所示

公共共享子主目录()
Dim t=新数据表(“x”)
t、 Columns.Add(“c1”,GetType(整数))
t、 Rows.Add(Integer.MaxValue)
t、 Rows.Add(Integer.MaxValue)
“错!但将列类型替换为GetType(double)并起作用
Dim res=t.Compute(“和(c1)*99999999”,无)
控制台写入线(res)
端接头
如上所述,如果定义了一个包含容纳数据类型的列,则可以使用大量数值输出计算数学表达式。但您所做的不是计算表表达式,而是在错误的应用程序中使用了
DataTable
功能

您可能应该编写一个解析器,只需将值加载到变量中,就可以执行
x+y
。其实,

这可能是一个小小的解决办法

t.Columns.Add(“c1”,GetType(double))'定义一个列
t、 行。添加(1)'将“1”添加到一行
'并将表达式乘以1作为求和的结果,始终
Dim res As Double=CType(t.Compute(“和(c1)*9999999999999*9999999”,无),双精度)

这将起作用

请打开选项Strict。这是一个由两部分组成的过程。首先,对于当前项目-在解决方案资源管理器中双击“我的项目”。选择左边的Compile。在“选项严格”下拉列表中,选择“启用”。第二,对于未来的项目-进入工具菜单->选项->项目和解决方案->VB默认值。在“选项严格”下拉列表中,选择“启用”。这将使您在运行时免于bug。我看不到任何乘法运算。请为您的问题添加执行乘法的代码。请打开选项Strict。这是一个由两部分组成的过程。首先,对于当前项目-在解决方案资源管理器中双击“我的项目”。选择左边的Compile。在“选项严格”下拉列表中,选择“启用”。第二,对于未来的项目-进入工具菜单->选项->项目和解决方案->VB默认值。在“选项严格”下拉列表中,选择“启用”。这将使您在运行时免于bug。我看不到任何乘法运算。请为您的问题添加执行乘法的代码。此问题标记为VB.NET而不是C#,因此在答案中发布C#代码是不可接受的。如果OP同时使用了这两个标签,那就足够了,但答案应该能回答问题,这个问题是关于VB.NET的。@jmcilhinney好的fixed@T.S.例如,99999999999不是一个固定值,请查看编辑的部分above@ManofTheWest上面的答案解释了这个问题被标记为VB.NET而不是C#,因此,在答案中张贴C#代码实际上是不可接受的。如果OP使用了这两个标签,那么就足够公平了,但答案应该是肯定的