option Explicit
Dim a(0 To 13) As String
Private Sub sort(f As Double)
Dim k As Single, s As Integer, m As Double, r As Single, i As Double, j As Single
k = 10
Do
j = f * k
i = Fix(j)
s = s + 1
If (i <> j) Then
k = k * 10
Else
Exit Do
End If
Loop
m = 10 ^ (s - 1)
For i = 1 To s
r = Fix(j / m)
Print a(r);
j = j Mod m
m = m / 10
'Print j, m
Next i
End Sub
Private Sub Whole(temp As Integer)
Dim i As Integer, s As Integer, j As Integer
s = temp
For i = 1 To 5
Select Case s
Case Is > 10000
j = s \ 10000: s = s Mod 10000
Call print_char(j, 10001)
If (s = 0) Then Exit Sub
If (s < 1000) Then Print "零";
Case 1000 To 10000
j = s \ 1000: s = s Mod 1000
Call print_char(j, 1001)
If (s = 0) Then Exit Sub
If (s < 100) Then Print "零";
Case 100 To 1000
j = s \ 100: s = s Mod 100
Call print_char(j, 101)
If (s = 0) Then Exit Sub
If (s < 10) Then Print "零";
Case 10 To 100
j = s \ 10: s = s Mod 10
If (s = 0) Then Exit Sub
Call print_char(j, 11)
Case 0 To 10
j = s
Call print_char(j, 1)
If (s = 0) Then Exit Sub
Exit Sub
End Select
Next i
End Sub
Private Sub print_char(j As Integer, i As Integer)
Select Case i
Case Is > 10000
Print a(j) & a(13);
Case 1000 To 10000
Print a(j) & a(12);
Case 100 To 1000
Print a(j) & a(11);
Case 10 To 100
Print a(j) & a(10);
Case 0 To 10
Print a(j);
End Select
End Sub
Private Sub Form_Click()
Dim num As Double, f As Double, q As Integer, temp As Integer
a(0) = "零": a(1) = "壶": a(2) = "贰": a(3) = "叁": a(4) = "肆": a(5) = "伍"
a(6) = "陆": a(7) = "柒": a(8) = "捌": a(9) = "玖": a(10) = "拾": a(11) = "佰"
a(12) = "仟": a(13) = "万"
Form1.Cls
Do
num = InputBox("请输入一个在0到三万之间的任何一个数!", "转成汉字大写", 0)
If (num < 30001 And num >= 0) Then Exit Do
Loop
temp = Fix(num): f = num - temp
Print "你输入的数是" & num
If (f = 0) Then
Call Whole(temp)
Else
Call Whole(temp)
Print "点";
Call sort(f)
End If
End Sub
//******************数值界限判定*********************
if rmbdx>999999999999999.99 then //要转换的数值rmbdx(人民币)
return "数值太大,无法转换"
end if
if rmbdx=0 then
return "零元整"
end if
//******************值串处理*************************
rmbdxstring=string(rmbdx)
for n=1 to len(rmbdxstring)
if mid(rmbdxstring,1,1)='-'then n++
if (mid(rmbdxstring,n,1))='.' then
n++
flag=1 //判断有无小数部分
exit
else
zs=zs+mid(rmbdxstring,n,1) //取整数部分
end if
next
if flag=1 then
xs=mid(rmbdxstring,n,2) //取小数部分
end if
rmbdxstring="" //清空 rmbdxstring
//****************将整数数值位转化大写*****************************
if zs<>'0' then //如zs='0'则一定是整数没有而小数部分有值
rmbdxstring=rmbdxstring+"元"
for n=len(zs) to 1 step -1
if mid(zs,n,1)<>'0' then //如果当前处理的位不为'0'时
if (len(zs)-n+1) > 4 and len(zs)-n+1 < 9 and wwflag=0 then //处理单位"万"
rmbdxstring="万"+rmbdxstring
wwflag=1
end if
if (len(zs)-n+1) > 8 and ywflag=0 then //处理单位"亿"
rmbdxstring="亿"+rmbdxstring
ywflag=1
end if
rmbdxstring=szdx[integer(mid(zs,n,1))]+dwdx[mod(len(zs)-n,4)]+rmbdxstring //转换相应位置的数的
zeroflag=1 //人民币大写字串
else //如果当前处理的位为'0'时
if zeroflag=1 and n<>len(zs) then //过滤掉最右边开始相连的'0',即中间与个位'0'不相关~
rmbdxstring="零"+rmbdxstring //的'0'可显示'零',但任意多个相连的'0'也只显示一个'零。
end if
zeroflag=0
end if
next
end if
//****************将小数数值位转化大写*****************************
if flag=1 then //当有小数位时
if len(xs)=1 then //当小数位只有一位时
rmbdxstring=rmbdxstring+szdx[integer(mid(xs,1,1))]+"角"
else //当小数位有两位时
if mid(xs,1,1)<>'0'then //处理角
rmbdxstring=rmbdxstring+szdx[integer(mid(xs,1,1))]+"角"
else
if zs<>"0" then
rmbdxstring=rmbdxstring+"零"
end if
end if
rmbdxstring=rmbdxstring+szdx[integer(mid(xs,2,1))]+"分" //处理分
end if
else //当没有小数位时加上'整'字
rmbdxstring=rmbdxstring+"整"
end if