新微赢技术网

标题: 各位好!数字转换问题! [打印本页]

作者: 孤单一个人    时间: 2010-1-17 03:03
标题: 各位好!数字转换问题!
各位师哥师姐好!
小弟有一个问题想请教,例如:15986523.36转换大写人民币:壹仟伍佰玖拾捌万陆仟伍佰贰拾叁元叁角陆分整
又如:15000.52:壹万伍仟元伍角贰分整
请问这个程序怎么实现啊!
谢谢!!!!!!
作者: 俬錛ヤ    时间: 2010-1-17 03:03
重点考虑位数,数字转换成大写并不复杂,也就是1->壹,2->贰
关键是仟佰万等这些如何添加,请楼主自己再细心考虑下,遗憾的是,我时间有限不能帮你写
大致思路
从低位到高位依次添加拾、佰、仟
同时用四位四位的分治策略,递归组合每四位
比如
215986523
首先分治,2,1598,6523 2->贰,1598->壹仟伍佰玖拾捌,6523->陆仟伍佰贰拾叁
然后通过递归再组合成:贰亿壹仟伍佰玖拾捌万陆仟伍佰贰拾叁元
作者: 假tp老tp练    时间: 2010-1-17 03:03
<script language=vbscript>
function Money222(asdf)
thenumber=asdf
dim one(),onestr()//定义数组
String1 = "零壹贰叁肆伍陆柒捌玖"
String2 = "万仟佰拾亿仟佰拾万仟佰拾元角分厘毫"
checkp=instr(thenumber,".")//判断是否含有小数位
if checkp<>0 then
thenumber=replace(thenumber,".","")//去除小数位
end if
length1=len(thenumber) //取得数据长度
redim one(length1-1)//重新定义数组大小
redim onestr(length1-1)//重新定义数组大小
for i=0 to length1-1
one(i)=mid(thenumber,i+1,1) //循环取得每一位的数字
one(i)=mid(string1,one(i)+1,1)//循环取得数字对应的大写
if checkp=0 then
//不含有小数的数据其数字对应的单位
onestr(i)=mid(string2,14-length1+i,1)
else//含有小数的数据其数字对应的单位
onestr(i)=mid(string2,15-length1+i+len(thenumber)-checkp,1)
end ifone(i)=one(i)&onestr(i)//将数字与单位组合
next
Money11=replace(join(one)," ","") //取得数组中所有的元素,并连接起来Money11=replace(Money11,"零万","万")
Money11=replace(Money11,"零亿","亿")
Money11=replace(Money11,"零仟","零")
Money11=replace(Money11,"零佰","零")
Money11=replace(Money11,"零拾","零")
do while not instr(Money11,"零零")=0
Money11=replace(Money11,"零零","零")
loop
Money11=replace(Money11,"零元","元")
Money222=Money11
end function
msgbox money222(12345678901)
</script>
作者: 飞.逝﹏..    时间: 2010-1-17 03:03
楼上的写的真不错 我也留了一份
你的代码好像没有限定金额的长度吧
要是输入一个很长的数就要报错了 呵呵
作者: 鸥飞007    时间: 2010-1-24 15:05
楼主,你写得实在是太好了。我惟一能做的,就只有把这个帖子顶上去这件事了




欢迎光临 新微赢技术网 (http://bbs.weiying.cn/) Powered by Discuz! X3.2