您的位置:程序门 -> powerbuilder -> 基础类



将数据转换为大写!


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


将数据转换为大写![已结贴,结贴人:horse19840422]
发表于:2007-07-31 15:48:25 楼主
比如我有个数据   ‘304'   现在我要将它   转换成   ‘叁佰零肆'这个转换函数该怎么写
还是有什么简单的方法可以实现??
谢谢!
发表于:2007-07-31 16:11:541楼 得分:1
最简单的就是字符串替换
发表于:2007-08-02 09:00:592楼 得分:5
c写的一个,改改就是pb的了
/*金额小写转大写函数*/
int   amtlow2upp(double   x   ,   char   *c_je)
{
    int   i   ,   n   ,   bz;
    char   je[14];   /*数字金额的字符变量*/
    char   temp[13];
    char   f1[10][3]={ "零 ", "壹 ", "贰 ", "叁 ", "肆 ", "伍 ", "陆 ", "柒 ", "捌 ", "玖 "};
    char   f2[11][3]={ "亿 ", "仟 ", "佰 ", "拾 ", "万 ", "仟 ", "佰 ", "拾 ", "元 ", "角 ", "分 "};

    sprintf(je   ,   "%.0lf ",   100   *x);

    n   =   strlen(   je);
    strcpy(c_je, "币 ");
    bz   =   1   ;

    for   (i   =   0   ;   i <   n   ;   i++)
    {
    strcpy   (temp   ,   &je[i]);

    if   (atoi(temp)   ==0)
    {
    bz   =   2;
    break   ;
    }
    if   (je[i]!= '0 ')
    {
    if   (bz   ==0   )
    {
    strcat   (c_je,f1[0]);
    }
    strcat   (c_je,f1[je[i]- '0 ']);
    bz   =1   ;
    strcat   (c_je,f2[11   -   n   +   i]);
    }
    else
    {
    if   (n   -   i   ==7   &&(je[i-1]!= '0 '   ¦ ¦je[i-2]!= '0 ' ¦ ¦je[i-3]!= '0 '))
    strcat   (c_je, "万 ");
    if   (n   -   i   ==3)
    strcat   (c_je, "元 ");
    bz   =   0;
    }
    }
if   (bz   ==2)
{
if   (n   -i   > =7   &&   n-i   <10)
strcat   (c_je, "万 ");
if   (n   -i   > =3)
strcat   (c_je, "元 ");
strcat   (c_je, "整 ");
}
    return   pb_ok;
}
发表于:2007-08-02 09:46:043楼 得分:4

string   dw,upca[10],sz,nextup,locdw,rslt,ls
integer   poip,scode,szlen,zeronu

dw   =   '分角元拾佰仟万拾佰仟亿拾 '
upca[1]   =   "零 "
upca[2]   =   "壹 "
upca[3]   =   "贰 "
upca[4]   =   "叁 "
upca[5]   =   "肆 "
upca[6]   =   "伍 "
upca[7]   =   "陆 "
upca[8]   =   "柒 "
upca[9]   =   "捌 "
upca[10]   =   "玖 "
rslt   =   " "

sz   =   string(money*100, '############ ')
if   left(sz,1)   =   '- '   then  
ls   =   '负 '  
sz   =   right(sz,len(sz)   -1)
else
ls   =   ' '
end   if
szlen   =   len(sz)
for   poip   =   szlen   to   1   step   -1
scode   =   integer(mid(sz,poip,1))
locdw   =   mid(dw,2*(szlen   -   poip)+1,2)
if   scode   =   0   then
if   pos( "亿元 ",locdw)   <>   0   or   locdw   =   "万 "   and   mid(sz,poip   -   3,3)   <>   "000 "   then
rslt   =   locdw   +   rslt
else
rslt   =   upca[scode+1]   +   rslt
end   if
else
rslt   =   upca[scode+1]   +   mid(dw,2*(szlen   -   poip)+1,2)   +   rslt
end   if
next

poip   =   pos(rslt,upca[1],1)
do   while   poip   <>   0
zeronu   =   0
nextup   =   mid(rslt,poip+2,2)
do   while   nextup   =   upca[1]
zeronu   =   zeronu   +   2
nextup   =   mid(rslt,poip+2+zeronu,2)
loop
if   pos( "亿万元 ",nextup)   <>   0   then
zeronu   =   zeronu   +   2
poip   =   poip   -   2
end   if
rslt   =   replace(rslt,poip+2,zeronu, " ")
poip   =   pos(rslt,upca[1],poip+2)
loop

if   right(rslt,2)   =   upca[1]   then
szlen   =   len(rslt)   -   1
if   szlen   =   1   then
rslt   =   " "
else
rslt   =   replace(rslt,szlen,2, "整 ")
end   if
end   if
rslt   =   ls   +   rslt
return   rslt


快速检索

最新资讯
热门点击