发票数字部分变成大写的问题(怎么定义函数及调用在线等)

qyqtn 2006-03-26 10:23:07
1.怎么自定义这个全局函数
2.怎么调用这个函数
3.解决100100 一万零一百 中加零的问题
由于本人愚笨 至今不善于用函数 往各路高手不吝赐教 给出源代码
并告诉我怎么定义及调用
...全文
445 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
alen_zeng 2006-04-01
  • 打赏
  • 举报
回复
學習
gahade 2006-03-31
  • 打赏
  • 举报
回复
告诉楼主一个方法.将这个函数做成全局函数.在dw中先做个求和栏位,然后加个标签,标签的text属性用f_moneytoupper(compute_2)就很方便啦!
gahade 2006-03-31
  • 打赏
  • 举报
回复
/* 功能:将金额转换为大写
入口:je
出口:人民币大写金额

*/

string upper_number[10]={"壹","贰","叁","肆","伍","陆","柒","捌","玖","拾"}
string number_dw[13]={"圆","拾","佰","仟","万","拾","佰","仟","亿","拾","佰","仟","万"}
string operate,upper_str
int i,j,point_pos,int_len

je = round(je,2)
if je=0 OR je=0.00 then
return "零圆整"
end if
upper_str=""
operate=string(round(abs(je),2))
point_pos=pos(operate,".")
if point_pos=0 then
int_len=len(operate)
else
int_len=point_pos - 1
end if
if abs(je)>0 then
for i=1 to int_len
j=int_len - i + 1
if i>1 AND mid(operate,i,1)="0" then
if mid(operate,i - 1,1)<>"0" AND number_dw[j]<>"万" AND number_dw[j]<>"亿" AND number_dw[j]<>"圆" then
upper_str=upper_str+"零"
elseif number_dw[j]="万" OR number_dw[j]="亿" OR number_dw[j]="圆" then
if right(upper_str,2)<>"零" then
if right(upper_str,2)<>"亿" AND right(upper_str,2)<>"万" then
if right(upper_str,2)="拾" AND number_dw[j]<>"圆" then
upper_str=upper_str+number_dw[j]+"零"
else
upper_str=upper_str+number_dw[j]
end if
end if
else
if (mid(upper_str,len(upper_str) - 3,2)<>"亿" AND mid(upper_str,len(upper_str) - 3,2)<>"万") OR number_dw[j]="圆" then
upper_str=left(upper_str,len(upper_str) - 2)+number_dw[j]
if number_dw[j]<>"圆" then
upper_str=upper_str+"零"
end if
end if
end if
end if
elseif i=1 and int_len=1 and mid(operate,i,1)='0' then
upper_str=""
else
upper_str=upper_str+upper_number[integer(mid(operate,i,1))]+number_dw[j]
end if
next
end if
if point_pos>0 then
if mid(operate,point_pos+1,1)<>"0" then
upper_str=upper_str+upper_number[integer(mid(operate,point_pos+1,1))]+"角"
if mid(operate,point_pos+2,1)<>"0" then
upper_str=upper_str+upper_number[integer(mid(operate,point_pos+2,1))]+"分"
end if
else
if mid(operate,point_pos+2,1)<>"0" then
if upper_str="" then
upper_str=upper_number[integer(mid(operate,point_pos+2,1))]+"分"
else
upper_str=upper_str+"零"+upper_number[integer(mid(operate,point_pos+2,1))]+"分"
end if
end if
end if
end if

if Right(Trim(upper_str),2)<>"分" then
upper_str=upper_str+"整"
end if
if je<0 then upper_str="(负)"+upper_str
return upper_str
CWX_1972 2006-03-30
  • 打赏
  • 举报
回复
LZ不会PB吧
netspies 2006-03-27
  • 打赏
  • 举报
回复
xuexi
seagullflying 2006-03-27
  • 打赏
  • 举报
回复
调用很简单 :totalmoney=string(sfmoney)
chinesemoney=f_translate_num2chinese(totalmoney)
seagullflying 2006-03-27
  • 打赏
  • 举报
回复
这个是我现在在用的,绝对可行,你试试
int i,i1
int val_wu
string chinese[9]
string je[10]
//chinese[1]='零'
chinese[1]='壹'
chinese[2]='贰'
chinese[3]='叁'
chinese[4]='肆'
chinese[5]='伍'
chinese[6]='陆'
chinese[7]='柒'
chinese[8]='捌'
chinese[9]='玖'
je[1]='分'
je[2]='角'
je[3]='元'
je[4]='拾'
je[5]='佰'
je[6]='仟'
je[7]='万'
je[8]='拾'
je[9]='佰'
je[10]='仟'
//---------以下由陈重写 97/8/25
int j,footer1,footer2
dec num
string retstr
i=pos(numstr,'.')
num=dec(numstr)
retstr=''
for j=1 to i - 1
footer1=integer(mid(numstr,j,1))
footer2=i - j+2
if footer1<>0 then
retstr+=chinese[footer1] + je[footer2]
else
if footer2=3 or footer2=7 then
retstr+=je[footer2]
//王晓民 1997/09/23
else
footer1=integer(mid(numstr,j+1,1))
if footer1<>0 then
retstr+='零'
end if
end if
//
end if
end for
for j=i+1 to i+2
footer1=integer(mid(numstr,j,1))
footer2= 3 - (j - i)
if footer1<>0 then
retstr+=chinese[footer1] + je[footer2]
end if
end for
retstr+='整'
if numstr='0.00' then retstr='零元整'
return retstr
TianChong 2006-03-27
  • 打赏
  • 举报
回复
以后在程序里任何地方都可以调用它了。

调用方法如下:
dec ldec_sum=123.99 //待转换的数值,这里举例带二位小数
string ls_sum //转换后返回的结果
ls_sum=EnToCn(ldec_sum)
if ls_sum<>'0' then
Messagebox("提示","转换结果为:"+ls_sum)
else
Messagebox("提示","转换错误,请检查传入的数值是否非法! ")
return
end if
TianChong 2006-03-27
  • 打赏
  • 举报
回复
在PB里(我的是PB9,版本不重要,都差不多的,但要先打开一个PB程序,否则后面的操作无法进行)在PB里打开你写的某个程序后,点击PB菜单FILE-->NEW...就会打开一个对话框,点击第三个标签,即[PB Object],里面有很多图标,双击第二行第四个(从左向右数),即[FUNCTION],就会打开一个函数编写窗口(在这里写的函数就是全局函数),你在Return Type里输入:string,在Function name里输入:EnToCn,在Argument Type里输入:decimal,在Argumetn Name:里输入SL,然后,在下面的大片空白区,也就是输入代码的区域里输入以下代码:
//////////////////////////////////////////////////////////////////
// 描述:
// 功能:小写转大写
// 参数:Dec
// 返回值:String
// CopyRights zy1999,All Rights Reserver .
//
//////////////////////////////////////////////////////////////////

Dec ld_sl
String ls_sl,ls_ydx,ls_ndx,ls_ndx1,ls_ydx1,ls_tdx
long i,j,l,m

ls_ydx="分角元拾佰仟万拾佰仟亿拾佰仟万亿"
ls_ndx="零壹贰叁肆伍陆柒捌玖"
If sl<0 Then
ld_sl=0 - sl
Else
ld_sl=sl
End if
ld_sl=round(ld_sl,2)
ls_sl=string(ld_sl)
//删除小数点
ls_sl=left(ls_sl,len(ls_sl) - 3)+right(ls_sl,2)
m=len(ls_sl)
//溢出处理
If m>16 Then
messagebox("提示信息","数据出错!")
Return '0'
End if
If ld_sl<1 Then
ls_sl=string(round(dec(ls_sl),0))
End if
For i=1 To m
j=long(mid(ls_sl,1,1))
l=len(ls_sl)
ls_sl=right(ls_sl,l - 1)
ls_ndx1=mid(ls_ndx,2*j+1,2)
ls_ydx1=mid(ls_ydx,2*l - 1,2)
If j=0 Then
If right(ls_tdx,2)<>'零' Then
If l=3 Or l=7 Or l=11 Then
ls_tdx=ls_tdx+ls_ydx1
End if
ls_tdx=ls_tdx+ls_ndx1
Else
If l=3 Then
ls_tdx=left(ls_tdx,len(ls_tdx) -2 )+ls_ydx1
End if
If l=7 Then
If mid(right(ls_tdx,4),1,2)<>'亿' Then
ls_tdx=left(ls_tdx,len(ls_tdx) -2 )+ls_ydx1
End If
End If
If l=11 Then
ls_tdx=left(ls_tdx,len(ls_tdx) -2 )+ls_ydx1
End If
End if
Else
ls_tdx=ls_tdx+ls_ndx1+ls_ydx1
End if
Next
If right(ls_tdx,2)='零' Then
ls_tdx=left(ls_tdx,len(ls_tdx) -2 )
End If
ls_tdx=ls_tdx+"整"
If sl<0 Then
ls_tdx=ls_tdx+"(负)"
End If
Return ls_tdx

//=============================
输入完成(复制进去就可以了)保存,这样一个叫EnToCn的小数转大写的全局函数就完成了。以后在程序里任何地方都可以调用它了。
qyqtn 2006-03-26
  • 打赏
  • 举报
回复
我找到过 是不可用的 没开头没结尾没说明的部分代码
真是伤脑筋
ice_frank 2006-03-26
  • 打赏
  • 举报
回复
强烈建议LZ在网上搜一下,还是比较多的,以前用过,我现在手头没有,帮你找到发给你。
qyqtn 2006-03-26
  • 打赏
  • 举报
回复
楼上写的太简单了 能更详细点吗
CWX_1972 2006-03-26
  • 打赏
  • 举报
回复
//////////////////////////////////////////////////////////////////
// 描述:
// 功能:小写转大写
// 参数:Dec
// 返回值:String
// CopyRights zy1999,All Rights Reserver .
//
//////////////////////////////////////////////////////////////////

Dec ld_sl
String ls_sl,ls_ydx,ls_ndx,ls_ndx1,ls_ydx1,ls_tdx
long i,j,l,m

ls_ydx="分角元拾佰仟万拾佰仟亿拾佰仟万亿"
ls_ndx="零壹贰叁肆伍陆柒捌玖"
If sl<0 Then
ld_sl=0 - sl
Else
ld_sl=sl
End if
ld_sl=round(ld_sl,2)
ls_sl=string(ld_sl)
//删除小数点
ls_sl=left(ls_sl,len(ls_sl) - 3)+right(ls_sl,2)
m=len(ls_sl)
//溢出处理
If m>16 Then
messagebox("提示信息","数据出错!")
Return '0'
End if
If ld_sl<1 Then
ls_sl=string(round(dec(ls_sl),0))
End if
For i=1 To m
j=long(mid(ls_sl,1,1))
l=len(ls_sl)
ls_sl=right(ls_sl,l - 1)
ls_ndx1=mid(ls_ndx,2*j+1,2)
ls_ydx1=mid(ls_ydx,2*l - 1,2)
If j=0 Then
If right(ls_tdx,2)<>'零' Then
If l=3 Or l=7 Or l=11 Then
ls_tdx=ls_tdx+ls_ydx1
End if
ls_tdx=ls_tdx+ls_ndx1
Else
If l=3 Then
ls_tdx=left(ls_tdx,len(ls_tdx) -2 )+ls_ydx1
End if
If l=7 Then
If mid(right(ls_tdx,4),1,2)<>'亿' Then
ls_tdx=left(ls_tdx,len(ls_tdx) -2 )+ls_ydx1
End If
End If
If l=11 Then
ls_tdx=left(ls_tdx,len(ls_tdx) -2 )+ls_ydx1
End If
End if
Else
ls_tdx=ls_tdx+ls_ndx1+ls_ydx1
End if
Next
If right(ls_tdx,2)='零' Then
ls_tdx=left(ls_tdx,len(ls_tdx) -2 )
End If
ls_tdx=ls_tdx+"整"
If sl<0 Then
ls_tdx=ls_tdx+"(负)"
End If
Return ls_tdx

1,075

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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