1,216
社区成员
发帖
与我相关
我的任务
分享
Option Explicit
Private Const OTHER = 3 '其它
Private Const NUMERIC = 1 '数字
Private Const NUMERIC_INT = 11 '整数
Private Const NUMERIC_REAL = 12 '小数
Public Function GetNum(s As String) As String '把s中的数字以空格分隔的数字字符串返回
Dim State As Integer
Dim Num_State As Integer
Dim chrPos As Long
Dim char As String
Dim pChr As String '整数部份的分隔符
chrPos = 1
State = OTHER
Num_State = NUMERIC_INT
pChr = ","
char = GetChr(s, chrPos)
While char <> chr(0)
Select Case State
Case OTHER
If Asc(char) >= 48 And Asc(char) <= 57 Then
GetNum = GetNum & char
State = NUMERIC
Else
chrPos = chrPos + 1
char = GetChr(s, chrPos)
End If
Case NUMERIC
chrPos = chrPos + 1
char = GetChr(s, chrPos)
Select Case char
Case "0" To "9"
GetNum = GetNum & char
Case "."
chrPos = chrPos + 1
char = GetChr(s, chrPos)
If (Asc(char) >= 48 And Asc(char) <= 57) Then '判断小数点后面是否跟有数字
GetNum = GetNum & GetChr(s, chrPos - 1) '如果小数点后面有数字
GetNum = GetNum & char
Num_State = NUMERIC_REAL
Else
GetNum = GetNum & " " '如果小数点后面没有数字,结束NUMERIC状态
State = OTHER
Num_State = NUMERIC_INT
End If
Case pChr
If Num_State = NUMERIC_INT Then 'pChr不能出现在小数部份,出现则视为不两个数字
chrPos = chrPos + 1
char = GetChr(s, chrPos)
If (Asc(char) >= 48 And Asc(char) <= 57) Then '判断pChr后面是否跟有数字
GetNum = GetNum & GetChr(s, chrPos - 1) '如果逗号后面有数字
GetNum = GetNum & char
Else
GetNum = GetNum & " " '如果pChr后面没有数字,结束NUMERIC状态
State = OTHER
Num_State = NUMERIC_INT
End If
Else
GetNum = GetNum & " "
State = OTHER
Num_State = NUMERIC_INT
End If
Case Else
GetNum = GetNum & " "
State = OTHER
Num_State = NUMERIC_INT
End Select
End Select
Wend
End Function
Public Function GetChr(s, chrPos)
GetChr = IIf(chrPos <= Len(s), Mid(s, chrPos, 1), chr(0))
End Function
Private Sub Command1_Click()
Text2.Text = CDbl(Text1.Text)
End Sub
Private Sub Form_Load()
Text1.Text = "¥123,45.00"
Text2.Text = ""
End Sub