人发币大小写转换函数。。。。

一半乐事 2003-06-09 12:00:03
我的VFP程序需要一个人发币大小写转换函数。可我想了很久也想不到好的方法,请高手指点一下思路,能提供代码重谢。要求就是将一任意数字转变成人发币大写显示出来。
...全文
46 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Maple119 2003-06-09
  • 打赏
  • 举报
回复
* 将数值转转换成人民币的大写形式


LPARAMETERS m.Je
m.je = 99960021600.18
LOCAL m.cStr, m.nValue, m.I, m.lZero, m.lY,m.lW



IF m.Je > 999999999999.99
RETURN '只能算到千亿元'
ENDIF

m.Je = ALLTRIM(STR(m.Je*100,14))
m.cStr =''
FOR i=0 TO LEN(m.Je)-1
m.nValue = VAL(SUBSTR(m.Je,I+1,1))
m.cStr = m.cStr + SUBSTR('零壹贰叁肆伍陆染捌玖',m.nValue*2+1,2)
m.cStr = m.cStr + ALLTRIM(SUBSTR(' 分 角 元 拾 佰 千 万拾万百万仟万 亿拾亿佰亿千亿',(LEN(m.Je)-I-1)*4+1,4))
ENDFOR

m.lZero = .F.
I=LEN(m.cStr)-1
*SET STEP ON
DO While I>0
m.Je =SUBSTR(m.cStr,I,2)
IF m.Je=='零'
IF SUBSTR(m.cStr,I+2,2)=='元'
m.cStr = LEFT(m.cStr,I-1) + RIGHT(m.cStr,LEN(m.cStr)-I-1)&&零元 去掉 零
ELSE
IF m.lZero
m.cStr = LEFT(m.cStr,I-1) + RIGHT(m.cStr,LEN(m.cStr)-I-3) &&第二次出玩零时去掉四个字符
ELSE
m.cStr = LEFT(m.cStr,I+1) + RIGHT(m.cStr,LEN(m.cStr)-I-3) &&第一次出现去掉零后面的两个字符
I=I-2
ENDIF
ENDIF
m.lZero = .T.
Loop
ENDIF
I=I-2
IF AT(m.Je,'零壹贰叁肆伍陆染捌玖')<>0
m.lZero = .F.
EndIF
ENDDO

IF RIGHT(m.cStr,2) = '零'
m.cStr = LEFT(m.cStr,LEN(m.cStr)-2)
ENDIF
IF RIGHT(m.cStr,2)<>'分'
m.cStr = m.cStr + '整'
ENDIF

*IF RIGHT(m.cStr,4)='分整'
* m.cStr = LEFT(m.cStr,LEN(m.cStr)-2)
*NDIF
*将多余的万与亿去掉
m.lZero = .F.
FOR m.I=LEN(m.cStr)-1 TO 0 STEP -2
IF SUBSTR(m.cStr,I,2)='万'
IF m.lZero
m.cStr = LEFT(m.cStr,I-1) + RIGHT(m.cStr,LEN(m.cStr)-I-1)
ELSE
m.lZero = .T.
ENDIF
ENDIF
ENDFOR
m.lZero = .F.
FOR m.I=LEN(m.cStr)-1 TO 0 STEP -2
IF SUBSTR(m.cStr,I,2)='亿'
IF m.lZero
m.cStr = LEFT(m.cStr,I-1) + RIGHT(m.cStr,LEN(m.cStr)-I-1)
ELSE
m.lZero = .T.
ENDIF
ENDIF
ENDFOR

RETURN m.cStr

这是我写的,昨天在家用Delphi重写一个时,方法比这个简单多了,但没有时间重写VFP用的.
xiolig 2003-06-09
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/topic/1807/1807207.xml?temp=.3786585
一半乐事 2003-06-09
  • 打赏
  • 举报
回复
哦,写错了,是人民币。

2,727

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧