中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-03 12:57
48,038 主题排行 / 350,123 发帖 / 今日 0 篇 / 48,251 会员排行
DOS批处理 & 脚本技术(批处理室) » 阿拉伯数字转中文数字VBS版
可打印版本  1,016 / 3
第1楼 jmz573515 发表于 2007-03-01 10:47
银牌会员 发帖 464 积分 1,212
阿拉伯数字转中文数字VBS版
用笨办法写的,希望各位帮忙测试一下...
(还望高人指点,希望能有更简单的方法,谢谢!)



[ Last edited by jmz573515 on 2007-3-1 at 10:15 AM ]
第2楼 slore 发表于 2007-03-01 14:03
铂金会员 发帖 2,478 积分 5,212

Do
a = 0
Do Until a = 1
Randomize
rdnum = Int(Rnd * 999999999999)
n = Inputbox("请输入一个小于1000000000000的整数:", "读数", rdnum)
If n = "" Then wscript.quit
If n = 0 Then Exit Do
If Isnumeric(n) = False Or Instr(n, ".") <> 0 Then
Msgbox "您输入的不是一个整数,请重新输入!", 16 + 4096, "错误"
Elseif Left(n, 1) = 0 Then
Msgbox "输入错误,您输入的数不能以“0”打头,请重新输入!", 16 + 4096, "错误"
Elseif Len(n) > 12 Then
Msgbox "您输入的数不能大于“999999999999”,请重新输入!", 16 + 4096, "错误"
Else
a=1
End If
Loop
Cagain=Msgbox("您输入的数是:" & n & vbCrLf & "读为:" & num2chinese(n) & vbcrlf & "是否继续?",vbyesno+32+4096,"系统提示")
If Cagain=vbNo Then wscript.quit
Loop


Function num2chinese(Num)
Dim numStr,strlen,i
numStr = ReplaceEx(Num, "0;零 ;1;壹 ;2;贰 ;3;叁 ;4;肆 ;5;伍 ;6;陆 ;7;柒 ;8;捌 ;9;玖 ")
strlen = Len(Num)
For i = strlen To 1 Step -1
numStr = Mid(numStr, 1, i * 2 - 1) & Replace(numStr, Mid(numStr, i * 2, 1), Mid("圆拾佰仟万拾佰仟亿拾佰仟万", strlen - i + 1, 1), i * 2, 1)
Next
numStr = ReplaceEx(numStr, "零拾;零;零佰;零;零仟;零;零零零;零;零零;零;零亿;亿;零万;万;零圆;圆;亿万;亿")
num2chinese = numStr
End Function

Function ReplaceEx(Str,reStr)
Dim tmp,Var
ReplaceEx = Str
Var=Split(reStr,";")
For tmp = 0 To (Ubound(Var) - 1) Step 2
ReplaceEx = Replace(ReplaceEx, Var(tmp), Var(tmp + 1))
Next
End Function


希望看了可以提高你的脚本思路和技巧
第3楼 jmz573515 发表于 2007-03-01 20:35
银牌会员 发帖 464 积分 1,212


[ Last edited by jmz573515 on 2007-7-28 at 10:23 PM ]
第4楼 slore 发表于 2007-03-02 00:38
铂金会员 发帖 2,478 积分 5,212
ReplaceEx其实功能和你的这个:
sz=split("0,1,2,3,4,5,6,7,8,9",",")
hz=split("零,一,二,三,四,五,六,七,八,九",",")
for i=0 to 9
n=replace(n,sz(i),hz(i))
next
差不多。。。

只不过是0;零;1;一这样把你的2个数组放在一个数组里(单数和双数保存者)
然后for 而且step 2就是用 双数位的数字替换前面单数为的数字。

主要是因为零十,零,零百,零,零千,零,零零零,零,零零,零,零亿,亿,零万,万,亿万,亿
被替换的和要替换的字符长度不一致……不然不建议用数组(像0123456789转的这个可以直接用mid去取)。

ReplaceEx处理的话,因为用了split函数,所以 被替换和要替换的这个长度不一致就可以解决了。
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023