Mat*_*lko 8 vb.net vb6 numeric
我今天早上在VB6应用程序中遇到了一个奇怪的错误,这都是因为IsNumeric没有像我预期的那样工作.有人可以解释为什么?对我来说,这似乎是一个错误.
此代码显示4.15877E+62在消息框中:
Dim strMessage As String
strMessage = "0415877D57"
If IsNumeric(strMessage) Then
MsgBox CDbl(strMessage)
Else
MsgBox "not numeric"
End If
Run Code Online (Sandbox Code Playgroud)
我猜测运行时引擎错误地认为D实际上是E?我认为这是一个错误,因为VB.NET输出中完全相同的代码not numeric
这是IsNumeric的已知问题吗?
Bob*_*b77 14
如果您查看VB6文档:
注意 浮点值可以表示为mmmEeee或mmmDeee,其中mmm是尾数,eee是指数(幂的值为10).单数据类型的最高正值是3.402823E + 38,或者是38次幂的3.4倍; Double数据类型的最高正值是1.79769313486232D + 308,或大约1.8倍10到308的幂.使用D在数字文字中分隔尾数和指数会导致该值被视为Double数据类型.同样,以相同的方式使用E将值视为单数据类型.
G M*_*ros 11
由于这种情况,我一直在使用我自己的IsNumber功能很长一段时间.对于某些货币符号,IsNumeric也可以返回true,如下所示:IsNumeric("$ 34.20").
我的IsNumber函数如下所示:
Public Function IsNumber(ByVal Data As String) As Boolean
If Data = "" Then
IsNumber = False
Exit Function
End If
IsNumber = IsNumeric(Data & "e0")
End Function
Run Code Online (Sandbox Code Playgroud)
这里的想法是......如果数据中已经存在e或d,则添加另一个将导致数据不是使用IsNumeric检查的数字.您可以通过将"e0"替换为".0e0"来轻松更改此功能以仅允许整数.想要只是正整数?然后使用:IsNumeric(" - "&Data&".0e0")
这个方法的唯一缺点是空字符串通常不是数字,但是当你向它添加"e0"时,它变成数字,所以你需要添加一个检查,就像我在我的代码中所做的那样.