打印本文 打印本文 关闭窗口 关闭窗口
在PB中实现数字的英文大写和中文大写
作者:武汉SEO闵涛  文章来源:敏韬网  点击数1322  更新时间:2009/4/24 21:42:58  文章录入:mintao  责任编辑:mintao
PowerBuilder是当前得到广泛应用的C/S数据库前端开发工具, 在使用PB的过程中,经常遇到要将数字进行英文或中文的大写转换,尤其是在处理金额的时候,本文整理了我在实践中用到的转换方法,提供给大家参考。

  一、 英文大写转换

  以下是进行英文大写转换的函数内容,函数名为dtoe:

//****** 阿拉伯数--- $#@62;英文数 ******
string aa,bb,T1,T2,T3,B,W,CC,a1
decimal a=0,c=0,a2
INTEGER V,M

aa="ONE TWO THREE FOUR 
FIVE SIX SEVEN "+&
 "EIGHT NINE TEN ELEVEN TWELVE
 THIRTEEN FOURTEEN FIFTEEN "+&
 "SIXTEEN SEVENTEENEIGHTEEN NINETEEN " 
bb="TWENTY THIRTY FORTY FIFTY SIXTY SEVENTYEIGHTY NINETY " 

//**** 进入时 --- $#@62; t
T=round(t,2)
T1=STRING(T)
DO WHILE POS(T1,",")$#@60; $#@62;0
 V=POS(T1,",") 
 T1=MID(T1,1,V - 1)+MID(T1,V+1)
LOOP
T2=" "
T3=T1
IF POS(T3,".")$#@60; $#@62;0 THEN
 V=POS(T3,".")
 T1=MID(T3,1,V - 1)
 T2=MID(T3,V+1)
END IF
T1=SPACE(10 - LEN(T1))+T1
CC=T1
B=" "
W=" "
M=9
//*** 整数处理 ***
do while m $#@62;0
 if MID(cc,m+1,1)=" " then
 exit
 end if
 if INTEGER(MID(cc,m - 1,3))$#@60; $#@62;0 then
 if m=6 then
 W=" THOUSAND "+w 
 else
 if m=3 then
 W=" MILLION "+w
 end if
 end if
 A=INTEGER(MID(cc,m,2)) 
//*** 小于 100 的数 ***
 if a$#@60; $#@62;0 then
 if a$#@60; 20 then
 B=RIGHTtrim(MID(aa,(a - 1)*9+1,9))
 else
 A1=STRING(a,00) 
 A2=INTEGER(MID(a1,1,1))
 b=RIGHTtrim(mid(bb,(a2 - 2)*7+1,7))
 a2=INTEGER(MID(a1,2,1))
 if a2$#@60; $#@62;0 then
 B=RIGHTtrim(b+"-"+MID(aa,(a2 - 1)*9+1,9)) 
 end if
 end if
 W=b+w 
 end if
 A=INTEGER(MID(cc,m - 1,1))
//*** 100--999 的数 ***
 if a$#@60; $#@62;0 then
 b=RIGHTtrim(mid(aa,(a - 1)*9+1,9))+" HUNDRED " 
 if w$#@60; $#@62;" " and m=9 then
 b=b+"AND " 
 end if
 w=b+w 
 end if
 end if
 m=m - 3
LOOP
//*** 小数处理 ***
if w=" " then
 w="ZERO " 
end if
if t2$#@60; $#@62;" " AND T2$#@60; $#@62;"00" then
 w=trim(w)+" & "+t2+"/100" 
end if
//*** 结果 --- $#@62; w
return w

  二、中文大写转换

  以下是进行中文大写转换的函数内容,函数名为dtormb:

decimal y
string je,x,hz1,hz2,e,h,f,m
int b,a
y=mje
X    rim(string(Y))
B = len(X)-3
A = 1
E = mid(X,A,1)
HZ2 = 零壹贰叁肆伍陆柒捌玖
HZ1 = 仟佰拾亿仟佰拾万仟佰拾元
JE =  
do while E$#@60; $#@62;.
 H = mid(HZ2,integer(E)*2+1,2)
 F = mid(HZ1,24 - (B - A)*2 - 1,2)
 if E$#@60; $#@62;0 or (E=0 and (F=亿 or F=万 or F=元)) then
 JE = trim(JE)+H+F
 else 
 JE = trim(JE)+H
 end if 
 A = A+1
 E = mid(X,A,1)
loop 
A = A+1
E = mid(X,A,1)
H = mid(X,A+1,1)
if E=0 and H=0 then
 JE = JE+整
else 
 if E=0 then
 JE = JE+零+mid(HZ2,integer(H)*2+1,2)+分
 else 
 if H=0 then
 JE = JE+mid(HZ2,integer(E)*2+1,2)+角整
 else 
 JE = JE+mid(HZ2,integer(E)*2+1,2)
 +角+mid(HZ2,integer(H)*2+1,2)+分
 end if 
 end if 
end if 
B = len(JE)
A = 1
do while A$#@60; B
 M = mid(JE,A,4)
 if M=零元 or M=零万 or M=零亿 or M=零零 then
 JE = mid(JE,1,A - 1)+trim(mid(JE,A+2,40))
 A = A - 2
 B = B - 2
 end if 
 A = A+2
loop 
return JE

打印本文 打印本文 关闭窗口 关闭窗口