测试代码:Private Sub Command1_Click()
Dim i As Long
For i = 0 To 5
Debug.Print "Print Val(2D" & i & "): " & Val("2D" & i)
Debug.Print "Print Val(2E" & i & "): " & Val("2E" & i)
Next
End Sub结果:
Print Val(2D0): 2
Print Val(2E0): 2
Print Val(2D1): 20
Print Val(2E1): 20
Print Val(2D2): 200
Print Val(2E2): 200
Print Val(2D3): 2000
Print Val(2E3): 2000
Print Val(2D4): 20000
Print Val(2E4): 20000
Print Val(2D5): 200000
Print Val(2E5): 200000A到Z中,除了D和E,其它都返回字母前的数字2百思不得其解,也查不到相关资料,在这儿请教大家了以前没注意过,昨天回贴时无意中发现的,看来某些情况下,要慎用Val......
Dim i As Long
For i = 0 To 5
Debug.Print "Print Val(2D" & i & "): " & Val("2D" & i)
Debug.Print "Print Val(2E" & i & "): " & Val("2E" & i)
Next
End Sub结果:
Print Val(2D0): 2
Print Val(2E0): 2
Print Val(2D1): 20
Print Val(2E1): 20
Print Val(2D2): 200
Print Val(2E2): 200
Print Val(2D3): 2000
Print Val(2E3): 2000
Print Val(2D4): 20000
Print Val(2E4): 20000
Print Val(2D5): 200000
Print Val(2E5): 200000A到Z中,除了D和E,其它都返回字母前的数字2百思不得其解,也查不到相关资料,在这儿请教大家了以前没注意过,昨天回贴时无意中发现的,看来某些情况下,要慎用Val......
Private Sub Command1_Click()
Print -4.94065645841247E-324
Print Val(-4.94065645841247E-324)
End Sub那怕你写成Private Sub Command1_Click()
Print -4.94065645841247E-324
Print Val(-4.94065645841247D-324)
End Sub当光标离开D处,D立即变成了E
Dim i As Long
Dim s As String
For i = 0 To 5
s = "2D" & CStr(i)
Debug.Print "Print Val(""2D" & i & """): " & Val(s)
s = "2E" & CStr(i)
Debug.Print "Print Val(""2E" & i & """): " & Val(s)
Next
End Sub
结果:
Print Val("2D0"): 2
Print Val("2E0"): 2
Print Val("2D1"): 20
Print Val("2E1"): 20
Print Val("2D2"): 200
Print Val("2E2"): 200
Print Val("2D3"): 2000
Print Val("2E3"): 2000
Print Val("2D4"): 20000
Print Val("2E4"): 20000
Print Val("2D5"): 200000
Print Val("2E5"): 200000
zdingyun 你好!
D和E在Val函数中是如何解析的呢?为什么Val函数参考中没有特别说明?这样的结果好象也没办法解释通......
有这么一段
一、VB的数据类型
VB中为了便于计算机的处理,充分利用计算机的系统资源,对程序中使用的变量或数据,根据其作用以及所表达的值的不同范围,规定了各种不同的类型。VB的数据类型比较丰富,主要由两部分组成:基本数据类型和用户自定义类型,本节中我们只介绍几种最常用的基本数据类型,其余的类型以后再作介绍。VB基本数据类型见下表。
类型 占用字节 值的有效范围 类型声明符
Integer(整型) 2 -32768~32767 %
Long(长整型) 4 -2147483648~2147483647 &
Single(单精度) 4 +1.40E-45~+3.40E38 !
Double(双精度) 8 +4.97D-324~+1.79D308 #
String(字符串) 1/每字符 0~65535个字符 $
Boolean(布尔型) 1 True或 False
Variant(通用型) 上述有效范围之一
整型数是不带小数且范围在-32768~32767之间的整数,在内存中用2个字节来存放一个整型数。在-32768~32767之间的整数,若在尾部加一个“%”也表示一个整型数,如-1235%,768%。
长整型数是范围在-2147483648~2147483647之间的整数,在内存中用4个字节来存放一个整型数。在-2147483648~2147483647之间的整数,若在尾部加一个“&”也表示一个长整型数。
单精度数是带小数的实数,有效值为7位,在内存中用4个字节来存放一个单精度数,它通常以指数的形式(科学记数法)来表示,在计算机中以“e”或“E”表示指数部分。单精度数取数范围在+1.40E-45~+3.40E38之间,或在一个实数的尾部加一个“!”也表示一个单精度数。
双精度数是也带小数的实数,有效位数为15位,在内存中用8个字节来存放一个双精度数,它通常以指数的形式(科学记数法)来表示,在计算机中以“d”或“D”表示指数部分。双精度数取数范围在+4.97D-324~+1.79D308之间,或在一个实数的尾部加一个“#”也表示一个双精度数。
字符串类型用以定义一个字符序列,在内存中一个字符用一个字节来存放。在程序中若引用一个字符串常数则必须用双引号“”将引用的字符括起来,如“How are you!”,”123+456”。
Val 函数,在它不能识别为数字的第一个字符上,停止读入字符串。那些被认为是数值的一部分的符号和字符,例如美圆号与逗号,都不能被识别。但是函数可以识别进位制符号 &O(八进制)和 &H(十六进制)。空白、制表符和换行符都从参数中被去掉。这样就可以解释所有的测试案例了
Debug.Print "Print Val(2D" & i & "): " & Val("&h2D" & i)
Debug.Print "Print Val(2E" & i & "): " & Val("&h2E" & i)
你没明白我的意思,我是要取一个字符串("A10B20C30D40")中的的所有数字
Dim tmp As String
Dim i As Long
s = "A10B20C30D40"
Do
For i = 1 To Len(s)
tmp = Mid(s, i, 1)
If IsNumeric(tmp) Then
tmp = Left(s, i - 1) & Val(Mid(s, i))
Debug.Print tmp
s = Replace(s, tmp, "", , 1)
Exit For
End If
Next
DoEvents
Loop While Len(s)测试时发现了这个问题yachong说的或许有道理......
这个应该就是答案!
还是基础不扎实......
如此说来,在字符串处理中,还是要慎用val......谢谢蚜虫,谢谢各位,明天结贴......