动网论坛,站长建站首选,国内使用量最多的论坛软件 动网论坛官方技术讨论区 站长工具 申请属于您自己的免费论坛
首页 | 新闻资讯 | 网站运营 | 网络编程 | 数据库 | 服务器 | 网页设计 | 图像媒体 | 网络应用 | 搜索优化 | 资源下载 | 动网主机 | DVBOX
    本站内  互联网 ASP论坛  ASP.Net论坛  PHP论坛
   程序开发 → 阅读文章

 在PB中实现数字的英文大写和中文大写

作者来源: 
阅读 数 301 人次 , 2006-4-26 11:21:00 


  P>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
  
 
 收藏本文  打印本文  论坛讨论  关闭窗口
· 上一篇:如何在PB中用直连驱动联接数据库
· 下一篇:关于PB应用程序的2000年问题
· 利用PB数据窗口特征制作进度条
· 在Avalon中建立数据识别的应用程序
· 在PB中利用DataWindow
· 一流软件领导的10个特征
· PowerBuilder应用开发系列讲座(20)


关于本站 | 联系我们 | 业务合作 | 客户案例 | 诚聘英才 | 广告合作 | 收藏本站
海口动网先锋网络科技有限公司版权所有
Copyright © 2000 - 2006 Cndw.Com
中华人民共和国电信与信息服务业务经营许可证编号 琼 ICP 020077