|
本帖最后由 todaynew 于 2013-2-26 14:07 编辑
sxgaobo 发表于 2013-2-21 11:40 ![]()
很好的,可不太符合银行的规范啊! Function RMB(ByVal Numeral As Double) As String
Dim Num As Double, str As String
Dim match_str As String
Dim i As Long
Num = Round(Abs(Numeral), 2) '取绝对值四舍五入保留2位小数
Select Case Num
Case 0
RMB = ""
Case Is > 999999999999.99
RMB = "不能大于12位数"
Case Else
str = Format(Num, "000000000000.00") '格式化字符串
match_str = "^(\d{4})(\d{4})(\d{4}).(\d)(\d)$"
str = ReplacMatch(str, match_str, "$1亿$2万$3元$4角$5分")
match_str = "(\d)(\d)(\d)(\d)"
str = ReplacMatch(str, match_str, "$1仟$2佰$3拾$4")
match_str = "(0(仟|佰|拾))*0(亿|万|元)"
str = ReplacMatch(str, match_str, "$30") '去中间0
match_str = "(0(仟|佰|拾))+"
str = ReplacMatch(str, match_str, "0") '去中间0
match_str = "(亿|万|元)0+(\d)"
str = ReplacMatch(str, match_str, "$10$2") '去中间0
match_str = "(元)0(\d)"
str = ReplacMatch(str, match_str, "$1$2") '去中间0
match_str = "0(亿|万)"
str = ReplacMatch(str, match_str, "") '去中间0
match_str = "0元"
str = ReplacMatch(str, match_str, "元") '去中间0
match_str = "^0(\d)"
str = ReplacMatch(str, match_str, "$1") '去中间0
match_str = "^((0\W)+|\W0+)"
str = ReplacMatch(str, match_str, "") '掐头
match_str = "^((0\W)+|\W0+)"
str = ReplacMatch(str, "(元)(0\W)+$", "$1") '去尾
match_str = "(元)$"
str = ReplacMatch(str, match_str, "$1整")
str = Replace(Replace(Replace(Replace(Replace(str, "0", "零"), "1", "壹"), "2", "贰"), "3", "叁"), "4", "肆")
str = Replace(Replace(Replace(Replace(Replace(str, "5", "伍"), "6", "陆"), "7", "柒"), "8", "捌"), "9", "玖")
RMB = str
End Select
End Function
Function ReplacMatch(ByVal str As String, ByVal match_str As String, ByVal Rematch_str As String) As String
'引用:Microsoft VBScript Regular Expressions 5.5
'功能:替换字符串
'参数:Test_str--测试字符串,match_str--源正则表达式,Rematch_str--替换的正则表达式
Dim re As New regexp
re.Pattern = match_str
re.IgnoreCase = True
re.Global = True
ReplacMatch = re.Replace(str, Rematch_str)
Set re = Nothing
End Function |
|