vb 中我只想截取字符串中的数字

myyangli88 2011-08-24 05:32:49
譬如字符串是“¥123,45.00”
我现在要截取得到12345.可是现在用Mid(“¥123,45.00”, InStr(a, "¥") + 1)只能截取到123.遇到逗号就停止了,请求大家帮帮忙吧!先谢了
...全文
756 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
G36822 2013-11-28
  • 打赏
  • 举报
回复
引用 10 楼 myyangli88 的回复:
非常感谢大家。解决了。qrlin888是可以的。
大神
c_cyd2008 2011-08-25
  • 打赏
  • 举报
回复
这是我以前用来识别数字的过程,能识别小数和整数,科学计数法的不能识别(要加上也不难),给你作个参考

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
myyangli88 2011-08-25
  • 打赏
  • 举报
回复
非常感谢大家。解决了。qrlin888是可以的。
qrlin888 2011-08-25
  • 打赏
  • 举报
回复
哪用得着那么复杂啊 直接 aa = Format("¥123,45.00", "0") 不就好啦!!
c_cyd2008 2011-08-25
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 qrlin888 的回复:]
哪用得着那么复杂啊 直接 aa = Format("¥123,45.00", "0") 不就好啦!!
[/Quote]
无语
橘子皮... 2011-08-24
  • 打赏
  • 举报
回复
MsgBox Fix("¥123,45.00")
贝隆 2011-08-24
  • 打赏
  • 举报
回复

Private Sub Command1_Click()
Text2.Text = CDbl(Text1.Text)
End Sub

Private Sub Form_Load()
Text1.Text = "¥123,45.00"
Text2.Text = ""
End Sub
worldy 2011-08-24
  • 打赏
  • 举报
回复
你的代码页有点乱,给你改一下:
a="¥123,45.00"
Mid(a, InStr(1,a, "¥") + 1)
worldy 2011-08-24
  • 打赏
  • 举报
回复
[Quote=引用楼主 myyangli88 的回复:]
譬如字符串是“¥123,45.00”
我现在要截取得到12345.可是现在用Mid(“¥123,45.00”, InStr(a, "¥") + 1)只能截取到123.遇到逗号就停止了,请求大家帮帮忙吧!先谢了
[/Quote]

代码错了,改为
Mid(“¥123,45.00”, InStr(1,a, "¥") + 1)
咸清 2011-08-24
  • 打赏
  • 举报
回复
自己写一个类似replace的函数,把不是 .和数字的都替换为空
lxq19851204 2011-08-24
  • 打赏
  • 举报
回复
Replace(Mid(a, 2, InStr(1, a, ".") - 2), ",", "")
孤独剑_LPZ 2011-08-24
  • 打赏
  • 举报
回复
right("¥123,45.00",len("¥123,45.00")-1)

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧