在写程序时遇到要把数字转换为人民币货币大写形式,在网上搜了一气,搜出来的大多是用C#写的,偶看的吃力,也有用VB写的,但搬来用,得出的结果却不能令人满意,只有自己动手,丰衣足食,写出了以下Code:
Private Function ConverString(ByVal Number As String) As String
If IsNumeric(Number) = False Then
Return "零元"
Exit Function
End If
Dim aNumber() As String = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"}
Dim bNumber() As String = {"", "", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟"}
Dim cNumber() As String = {"", "角", "分"}
Dim L As Integer, I As Integer
Dim strLeft As String, strRight As String, l_strConver As String, r_strConver As String, strConver As String, bstrConver As String
bstrConver = ""
strConver = ""
'分析数字中是否含有"."
I = InStr(Number, ".", CompareMethod.Text)
If I = 0 Then
'如果没有含有.I就为给定字串的长度,左边的字串就为给定的字串,右边的字串为空
I = Len(Number)
strLeft = Number
strRight = ""
Else
'如果含有,则从.分割左右两边的字串
I -= 1
strLeft = Mid(Number, 1, I)
strRight = Mid(Number, I + 2)
End If
'计算小数点左面的数
Dim n As Integer, val As Integer, x As Integer, p As Boolean
x = I
For n = 1 To I
l_strConver = Mid(strLeft, n, 1)
val = CInt(l_strConver)
If val = 0 Then
If p = False Then
strConver = strConver + aNumber(val)
End If
p = True
Select Case bNumber(x)
Case "亿"
strConver = strConver + bNumber(x)
p = False
Case "万"
strConver = strConver + bNumber(x)
p = False
End Select
Else
p = False
strConver = strConver + aNumber(val) + bNumber(x)
End If
x -= 1
Next
strConver += "元"
'替换掉结果中的部分零
strConver = Replace(strConver, "零亿", "亿", 1, 1)
strConver = Replace(strConver, "零万", "万", 1, 1)
strConver = Replace(strConver, "零元", "元", 1, 1)
'计算小数点右面的数
L = Len(strRight)
If L = 0 Then '如果右面字串没有数字,则不用计算,有再计算
strConver += "整"
Else
If CInt(strRight) > 0 Then
For n = 1 To L
r_strConver = Mid(strRight, n, 1)
val = CInt(r_strConver)
bstrConver = bstrConver + aNumber(val) + cNumber(n)
bstrConver = Replace(bstrConver, "零角", "", 1, 1)
bstrConver = Replace(bstrConver, "零分", "", 1, 1)
Next
strConver += bstrConver
Else
strConver += "整"
End If
End If
Return strConver
End Function