在PowerBuilder 中实现小写金额转换成大写金额
作者:曹滨
单位:曹滨(大庆市第二医院计算机室 163461)
关键词:
航空航天医药000245 随着数据库技术在各行各业的广泛应用,作为企业级数据库前端开发工具的PowerBuilder日益成为开发人员的得力助手。PowerBuilder以其开放的体系结构,友好的用户界面和简洁高效的开发环境赢得了众多程序员的喜爱,在数据库开发工具领域占据了高达44%的市场份额。
PowerBuilder是由多个功能模块组成的可视化集成开发环境,是面向对象的开发工具,用它可以方便地建立起基于Windows的分布式数据库应用。其功能模块完成应用管理、窗口对象设计、菜单对象设计、数据窗对象设计和数据库查询等工作,这些功能模块由于PowerBuilder提供的色彩丰富的工具条而被称作“Painter”(画板)。
, http://www.100md.com
在编程中遇到药在程序的很多地方需要打印金额的中文大写,如打印发票、记账凭证等,PowerBuilder没有提供这样一个数字转换成金额大写的函数。我就自己编了一个通用函数。
首先要创建新函数,并且定义参数。在工具栏单击‘function’图标按钮,打开‘Select Function’对话框,单击‘New’按钮创建一个新函数,并且定义参数:
在定义完参数后,单击‘OK’按钮开始输入函数源代码,其源代码如下:
int i,lendec,lenint
string numstr,a,b,c,d,bbak
numstr=string(memo_dec,“#0.00”)
, 百拇医药
lenint=len(mid(numstr,1,pos(numstr,‘.’)-1))
if right(numstr,2)=‘00'then
lendec=0
else
lendec=2
end if
string dxint[13],dxdec[2],sz[13]
string dxstr=“万仟佰拾亿仟佰拾万仟佰拾元”
string szstr=“零壹贰叁肆伍陆柒捌玖”
, http://www.100md.com
for i=1 to 13
dxint[i]=mid(dxstr,26-i*2+1,2)
if i<1 1 then
sz[i]=mid(szstr,i*2-1,2)
else
sz[i]=“ ”
end if
next
dxdec[1]=“角”
dxdec[2]=“分”
, 百拇医药
dxstr=“ "
for i=1 to lenint
a=mid(mid(numstr,1,lenint),i,1)
b=sz[integer(a)+1]
c=dxint[lenint-i+1]
if dxstr <>“ ”then
d=mid(dxstr,len(dxstr)-1,2)
else
d=“ ”
end if
, http://www.100md.com
if b=“零”and(d=“零”or b=bbak or c=“元” or c=“万” or c=“亿”)then b=“ ”
if a=“0” and c<>“元”and c<>“万”and c<>“亿”then c=“ ”
if (c=“元” or c=“万” or c=“亿”)and d=“零”and a=“0”then
dxstr=mid(dxstr,1,len(dxstr)-2)
d=mid(dxstr,len(dxstr)-1,2)
if(c=“元”and d=“万”or c=“万”and d=“亿”)then c=“”
end if
, http://www.100md.com
dxstr=dxstr+b+c
bbak=b
next
for i=1 to lendec
a=mid(mid(numstr,lenint+2,lendec),i,1)
if a=“0”and dxdec[i]=“分”then
b=“”
else
b=sz[integer(a)+1]
end if
, http://www.100md.com if a<>“0”then
dxstr=dxstr+b+dxdec[i]
else
dxstr=dxstr+b
end if
next
if lendec=0 then dxstr=dxstr+“整”
return dxstr
调用方法:
string memo_je-char ∥返回中文金额字符串
dec memo_je ∥需要转换金额
memo_je=3455.12
∥调用金额转换函数
memo_je_char=f_numbertochar(memo_je)… … … 2000年3月收稿, 百拇医药
单位:曹滨(大庆市第二医院计算机室 163461)
关键词:
航空航天医药000245 随着数据库技术在各行各业的广泛应用,作为企业级数据库前端开发工具的PowerBuilder日益成为开发人员的得力助手。PowerBuilder以其开放的体系结构,友好的用户界面和简洁高效的开发环境赢得了众多程序员的喜爱,在数据库开发工具领域占据了高达44%的市场份额。
PowerBuilder是由多个功能模块组成的可视化集成开发环境,是面向对象的开发工具,用它可以方便地建立起基于Windows的分布式数据库应用。其功能模块完成应用管理、窗口对象设计、菜单对象设计、数据窗对象设计和数据库查询等工作,这些功能模块由于PowerBuilder提供的色彩丰富的工具条而被称作“Painter”(画板)。
, http://www.100md.com
在编程中遇到药在程序的很多地方需要打印金额的中文大写,如打印发票、记账凭证等,PowerBuilder没有提供这样一个数字转换成金额大写的函数。我就自己编了一个通用函数。
首先要创建新函数,并且定义参数。在工具栏单击‘function’图标按钮,打开‘Select Function’对话框,单击‘New’按钮创建一个新函数,并且定义参数:
在定义完参数后,单击‘OK’按钮开始输入函数源代码,其源代码如下:
int i,lendec,lenint
string numstr,a,b,c,d,bbak
numstr=string(memo_dec,“#0.00”)
, 百拇医药
lenint=len(mid(numstr,1,pos(numstr,‘.’)-1))
if right(numstr,2)=‘00'then
lendec=0
else
lendec=2
end if
string dxint[13],dxdec[2],sz[13]
string dxstr=“万仟佰拾亿仟佰拾万仟佰拾元”
string szstr=“零壹贰叁肆伍陆柒捌玖”
, http://www.100md.com
for i=1 to 13
dxint[i]=mid(dxstr,26-i*2+1,2)
if i<1 1 then
sz[i]=mid(szstr,i*2-1,2)
else
sz[i]=“ ”
end if
next
dxdec[1]=“角”
dxdec[2]=“分”
, 百拇医药
dxstr=“ "
for i=1 to lenint
a=mid(mid(numstr,1,lenint),i,1)
b=sz[integer(a)+1]
c=dxint[lenint-i+1]
if dxstr <>“ ”then
d=mid(dxstr,len(dxstr)-1,2)
else
d=“ ”
end if
, http://www.100md.com
if b=“零”and(d=“零”or b=bbak or c=“元” or c=“万” or c=“亿”)then b=“ ”
if a=“0” and c<>“元”and c<>“万”and c<>“亿”then c=“ ”
if (c=“元” or c=“万” or c=“亿”)and d=“零”and a=“0”then
dxstr=mid(dxstr,1,len(dxstr)-2)
d=mid(dxstr,len(dxstr)-1,2)
if(c=“元”and d=“万”or c=“万”and d=“亿”)then c=“”
end if
, http://www.100md.com
dxstr=dxstr+b+c
bbak=b
next
for i=1 to lendec
a=mid(mid(numstr,lenint+2,lendec),i,1)
if a=“0”and dxdec[i]=“分”then
b=“”
else
b=sz[integer(a)+1]
end if
, http://www.100md.com if a<>“0”then
dxstr=dxstr+b+dxdec[i]
else
dxstr=dxstr+b
end if
next
if lendec=0 then dxstr=dxstr+“整”
return dxstr
调用方法:
string memo_je-char ∥返回中文金额字符串
dec memo_je ∥需要转换金额
memo_je=3455.12
∥调用金额转换函数
memo_je_char=f_numbertochar(memo_je)… … … 2000年3月收稿, 百拇医药