繁体   English   中英

System.OverflowException:“算术运算导致溢出。” 网络

[英]System.OverflowException: "The arithmetic operation caused an overflow." VB.NET

当我尝试根据电话号码对我的功能进行搜索时,例如。 4444444444,这个异常来找我。 我该如何解决?

这是我的代码:

    If IsNumeric(Trim(tbNumSearch.Text)) Then
        SearchByNumber(Val(tbNumSearch.Text)) 'this is where I get the error
    End If


  Sub SearchByNumber(ByVal telNumber As Integer)
 End Sub

但是当我用例如搜索时。 4444,我没有收到此错误。

我想我在转换中犯了一个错误。 也许这是一个 64 位数字。 无论如何,我找不到解决方案。 请帮忙。

我猜SearchByNumber()需要一个Integer 有符号Integer数值最多只能达到大约 20 亿,并且不能表示更高的值。 换句话说,它不足以处理美国电话号码,美国电话号码可能接近 100 亿,或者是长途前缀的 200 亿。

您可以通过更改为Long或使用Strings来解决此问题。

Option Strict On ,它会告诉你

Option Strict On 不允许从“Double”到“Integer”的隐式转换

在此处输入图片说明

这意味着您应该将整数传递给函数。

此外,不幸的是,数字 4444444444 对于Integer是一个 32 位数字太大,它可以容纳的最大值是 2147483647

在此处输入图片说明

所以你可以

SearchByNumber的声明更改为采用 64 位整数

Sub SearchByNumber(ByVal telNumber As Long)

或者不使用这么大的数字,但我想这不是一个选择。

我也会改为转换为整数类型,同时停止使用过时的函数(如Val )。 LongLong.TryParse()是不错的选择。

Dim l As Long
If Long.TryParse(Trim(tbNumSearch.Text), l) Then SearchByNumber(l)
Sub SearchByNumber(telNumber As Long)

End Sub

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM