菜鸟紧急求助,还请各位帮忙!

szqh 2003-08-21 10:31:41
怎么样将阿拉伯数字自动转换为大写的!
比如:输入1自动转换为壹
请大家帮帮忙!
...全文
46 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzzm 2003-09-08
  • 打赏
  • 举报
回复
我也收藏
cuc3com 2003-09-07
  • 打赏
  • 举报
回复
那怎么还不结帐
dfwxj 2003-09-07
  • 打赏
  • 举报
回复
to mgan(很笨 ,很笨的鸟! 想先飞) :

你的代码好象在一个关于人民币的贴子里出现过,我也回复过,你的代码有几个问题:

1、如果是负数会超出处理范围

2、不处理小于1元的数据,不切实际

3、财务制度要求,金额没有分的末尾一律加“整”

另外,关于数字大小写有两类:一是读数,如票据金额的大写;另一类是大小写转换,如发票的金额套打
dfwxj 2003-08-22
  • 打赏
  • 举报
回复
我也来一个自编的人民币金额转换函数:


**金额小写转换大写
FUNC cash
PARA rmb
FH=''
IF RMB<0
RMB=RMB*-1
FH='负'
ENDI
IF RMB>=1000000000
WAIT '金额超出有效范围!' WIND TIME 2
RETU ''
ENDI
rmb1=allt(str(rmb*100,15))
crmb=''
n1=len(rmb1)
money0='零壹贰叁肆伍陆柒捌玖'
MONEY1='分角元拾佰仟万拾佰仟亿'
DIME S1(N1),S2(N1),T1(N1),T2(N1)
STORE '' TO S1,S2
FOR N=1 TO N1
Q=VAL(SUBS(RMB1,N1-N+1,1))
S2(N)=SUBS(MONEY0,Q*2+1,2)
T2(N)=SUBS(MONEY0,Q*2+1,2)
S1(N)=SUBS(MONEY1,N*2-1,2)
T1(N)=SUBS(MONEY1,N*2-1,2)
ENDF
IF S2(1)='零' &&处理分
T2(1)=''
T1(1)='整'
ENDI
IF N1>1
FOR N=2 TO N1
IF S2(N)='零'
IF S2(N-1)='零'
T2(N)=''
ENDI
IF n=3 AND s2(2)#'零' &&处理元为零而角不为零
T2(3)=''
T1(3)='元零'
ENDI
IF n=7 AND s2(6)#'零' &&处理万元为零而仟不为零
T2(7)=''
T1(7)='万零'
ENDI
IF N#3 AND N#7 &&除元和万外
T1(N)=''
ENDI
ENDI
ENDF
ENDI
IF N>10 AND S2(8)='零' AND S2(9)='零' AND S2(10)='零'
T1(7)=''
ENDI
FOR N=1 TO N1
CRMB=T2(N)+T1(N)+CRMB
ENDF
CRMB=FH+CRMB
crmb=allt(crmb)
IF rmb=0
crmb=''
ENDI
RETU CRMB
mgan 2003-08-22
  • 打赏
  • 举报
回复
假如 變量 MONEY 是我們要轉換的參數,我們在程序(*.PRG)中這樣寫:
推荐比较经典的一个

PARA MONEY
IF MONEY>999999999.99
RETURN ('<數值大于拾億! >')
ENDIF
IF ABS(MONEY)<1
IF ABS(MONEY)=0
RETURN('零圓')
ELSE
RETURN('<小于壹圓!>')
ENDIF
ENDIF
negative=.F.
IF MONEY<0
MONEY=-MONEY
negative=.T.
ENDIF
STOR '' TO a9, a8, a7 ,a6 ,a5 ,a4 ,a3 ,a2 ,a1 ,b1 ,b2
MONEY=ROUND(MONEY,2)
ch1='零壹貳參肆伍陸柒捌玖'
ch2='億萬仟佰拾圓角分'
ch_MONEY=ALLTRIM(STR(MONEY,14,2))
IF !('.'$'ch_MONEY')
dec=LEFT(ch_MONEY,AT('.',ch_MONEY)-1)
rec=SUBST(ch_MONEY,AT('.',ch_MONEY)+1,LEN(ch_MONEY)-AT('.',ch_MONEY))
ELSE
dec=ch_MONEY
rec=''
ENDIF
FOR i=1 TO LEN(dec)
j=STR(i,1)
a&j=SUBST(dec,LEN(dec)-i+1,1)
ENDFOR
IF !EMPTY(rec)
FOR i=1 TO LEN(rec)
j=STR(i,1)
b&j=SUBST(rec,i,1)
ENDFOR
ENDIF
FOR i=1 TO LEN(dec)
j=STR(i,1)
IF !EMPTY(a&j)
a&j=SUBST(ch1,2*VAL(a&j)+1,2)
ENDIF
ENDFOR
FOR i=1 TO LEN(rec)
j=STR(i,1)
IF !EMPTY(b&j)
b&j=SUBST(ch1,2*VAL(b&j)+1,2)
ENDIF
ENDFOR
a9=a9+IIF(!EMPTY(a9),'億','')
a8=a8+IIF((!EMPTY(a8)).AND.(a8<>'零'),'仟','')
a7=a7+IIF((!EMPTY(a7)).AND.(a7<>'零'),'佰','')
a6=a6+IIF((!EMPTY(a6)).AND.(a6<>'零'),'拾','')
a5=a5+IIF((!EMPTY(a5)).AND.(a5<>'零' .OR. a6<>'零' .OR. a7<>'零' .OR. a8<>'零'),'萬','')
a4=a4+IIF((!EMPTY(a4)).AND.(a4<>'零'),'仟','')
a3=a3+IIF((!EMPTY(a3)).AND.(a3<>'零'),'佰','')
a2=a2+IIF((!EMPTY(a2)).AND.(a2<>'零'),'拾','')
a1=a1+'圓'
*a1=a1+IIF((!EMPTY(a1)).AND.(a1<>'零' .OR. a2<>'零' .OR. a3<>'零' .OR. a4<>'零'),'圓','')
b1=IIF(b1=='零' .AND. b2=='零' ,'整',b1)+IIF((!EMPTY(b1)).AND.(b1<>'零'),'角','')
b2=IIF(b2=='零','',b2)+IIF((!EMPTY(b2)).AND.(b2<>'零'),'分','')
chr_covent=a9+a8+a7+a6+a5+a4+a3+a2+a1+b1+b2
i=1
DO WHILE i<LEN(ALLTRIM(chr_covent))-2
b_ch=SUBST(ALLTRIM(chr_covent),i,2)
e_ch=SUBST(ALLTRIM(chr_covent),i+2,2)
IF b_ch='零' .AND. (e_ch='零' .OR. e_ch='萬' .OR. e_ch='圓')
chr_covent=LEFT(ALLTRIM(chr_covent),i-1)+SUBST(ALLTRIM(chr_covent),i+2,LEN(ALLTRIM(chr_covent))-i-1)
ELSE
i=i+2
ENDIF
ENDDO
IF negative
chr_covent='(負)'+chr_covent
ENDIF
RETURN chr_covent


以上程序的原則是根据位置先抓取數字再加上它的級別.

szqh 2003-08-22
  • 打赏
  • 举报
回复
真是太感谢各位了,有机会一定好好表示感谢!

:)
newfang 2003-08-22
  • 打赏
  • 举报
回复
象楼上所说:

自己编写吧!!需要一个很长的KISS(CASE)…… :)
szjhxu 2003-08-21
  • 打赏
  • 举报
回复
自己编写函数。
cuc3com 2003-08-21
  • 打赏
  • 举报
回复
function convdx
PARAMETER M.PA
DO CASE
CASE M.PA='0'
RETURN '零'
CASE M.PA='1'
RETURN '壹'
CASE M.PA='2'
RETURN '贰'
CASE M.PA='3'
RETURN '叁'
CASE M.PA='4'
RETURN '肆'
CASE M.PA='5'
RETURN '伍'
CASE M.PA='6'
RETURN '陆'
CASE M.PA='7'
RETURN '柒'
CASE M.PA='8'
RETURN '捌'
CASE M.PA='9'
RETURN '玖'
CASE M.PA='.'
RETURN ''
ENDCASE

function dx
PARAMETER M.PA
PRIVATE M.ZERO, M.VALU, M.STR, M.LENG, A, M.ZERO1
M.ZERO = .F.
M.ZERO1 = .F.
M.VALU = ''
M.STR = ALLTRIM(STR(M.PA,14,2))
M.LENG = LEN(M.STR)
A = 0
DO WHILE A<=M.LENG
DO CASE
CASE M.LENG-A=12
M.VALU = M.VALU+CONVDX(SUBSTR(M.STR,A+1,1))+'亿'
CASE M.LENG-A=11
M.ZERO1 = (SUBSTR(M.STR,A+1,1)=='0')
M.VALU = M.VALU+CONVDX(SUBSTR(M.STR,A+1,1))+IIF(M.ZERO1,'','仟')
CASE M.LENG-A=10 .OR. M.LENG-A=6
M.ZERO = (SUBSTR(M.STR,A+1,1)=='0')
IF M.ZERO
IF M.ZERO1
M.VALU = M.VALU
ELSE
M.VALU = M.VALU+'零'
ENDIF
ELSE
M.VALU = M.VALU+CONVDX(SUBSTR(M.STR,A+1,1))+'佰'
ENDIF
M.ZERO1 = M.ZERO
CASE M.LENG-A=9 .OR. M.LENG-A=5
M.ZERO = (SUBSTR(M.STR,A+1,1)=='0')
IF M.ZERO
IF M.ZERO1
M.VALU = M.VALU
ELSE
M.VALU = M.VALU+'零'
ENDIF
ELSE
M.VALU = M.VALU+CONVDX(SUBSTR(M.STR,A+1,1))+'拾'
ENDIF
M.ZERO1 = M.ZERO
CASE M.LENG-A=8
M.ZERO = (SUBSTR(M.STR,A+1,1)=='0')
IF M.ZERO
IF M.ZERO1
M.VALU = M.VALU+'万'
ELSE
M.VALU = M.VALU+'万零'
ENDIF
ELSE
M.VALU = M.VALU+CONVDX(SUBSTR(M.STR,A+1,1))+'万'
ENDIF
IF SUBSTR(M.VALU,LEN(M.VALU)-3,2)=='零'
M.VALU = SUBSTR(M.VALU,1,LEN(M.VALU)-4)+'万零'
ENDIF
M.ZERO1 = M.ZERO
CASE M.LENG-A=7
M.ZERO = (SUBSTR(M.STR,A+1,1)=='0')
IF M.ZERO
IF M.ZERO1
M.VALU = M.VALU
ELSE
M.VALU = M.VALU+'零'
ENDIF
ELSE
M.VALU = M.VALU+CONVDX(SUBSTR(M.STR,A+1,1))+'仟'
ENDIF
M.ZERO1 = M.ZERO
CASE M.LENG-A=4
M.ZERO = (SUBSTR(M.STR,A+1,1)=='0')
IF M.ZERO
M.VALU = M.VALU+'圆'
ELSE
M.VALU = M.VALU+CONVDX(SUBSTR(M.STR,A+1,1))+'圆'
ENDIF
M.ZERO1 = M.ZERO
ENDCASE
A = A+1
ENDDO
IF SUBSTR(M.VALU,LEN(M.VALU)-3,2)=='零'
M.VALU = SUBSTR(M.VALU,1,LEN(M.VALU)-4)+'圆'
ENDIF
IF M.PA=INT(M.PA)
M.VALU = M.VALU+'整'
ELSE
IF SUBSTR(M.STR,M.LENG,1)=='0'
M.VALU = M.VALU+CONVDX(SUBSTR(M.STR,M.LENG-1,1))+'角整'
ELSE
M.VALU = M.VALU+CONVDX(SUBSTR(M.STR,M.LENG-1,1))+'角'+CONVDX(SUBSTR(M.STR,M.LENG,1))+'分'
ENDIF
ENDIF
RETURN M.VALU

使用的时候用dx(1002.3) 或dx(914.45)就可以了
fj_jiangqi 2003-08-21
  • 打赏
  • 举报
回复
要自己专门写一个函数处理
do case
case n=1
return "壹"
...
endcase
-------------------------
我流落在凄凉的世界里-孤苦伶仃
我过着动荡无助的生活-四处漂泊
wxjUN 2003-08-21
  • 打赏
  • 举报
回复
哇,好长!
我也给一个吧
*-------vfp-------
G='零壹贰叁肆伍陆柒捌玖'
H='分角圆拾佰仟万拾佰仟亿拾'
K=' '
DD1=YS1*100
DX0=STR(DD1)
DXA=ALLT(DX0)
DX1=LEN(DXA)
D=1
DO WHILE D<DX1.OR.D=DX1
DY=DX1-D+1
F=SUBSTR(DXA,DY,1)
* IF F<>'.'
F1=VAL(F)*2+1
G1=SUBSTR(G,F1,2)
D1=D*2-1
H1=SUBSTR(H,D1,2)
K1=G1+H1
K=K1+K
* ELSE
* ENDI
D=D+1
ENDDO
REPL ALL DX with K FOR ALLT(XH)='合 计'


//**C#**//-------金额大写转换-----------
string S=xyds1;

string T1=".";
int l1=S.Length;
int n=S.IndexOf(T1);
string S12;
if (n==-1)
{
S12=S+"00";

}
else
{
string S1=S.Substring(0,l1-3);
string S2=S.Substring(l1-2,2);
S12=S1+S2;
}
double YS1=double.Parse(S12);

string G="零壹贰叁肆伍陆柒捌玖";
string H="分角圆拾佰仟万拾佰仟亿拾";
string K=" ";
string DXA=YS1.ToString().Trim();

int DX1=DXA.Length;

for (int D=1;D<=DX1;D=D+1)
{
int DY=DX1-D;
string F=DXA.Substring(DY,1);

int F1=Int32.Parse(F);
string G1=G.Substring(F1,1);
int D1=D-1;
string H1=H.Substring(D1,1);
string K1=G1+H1;
K=K1+K;

2,722

社区成员

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

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