$PBExportHeader$f_decimaltocnf.srf global type f_decimaltocnf from function_object end type forward prototypes global function string f_decimaltocnf (decimal number, integer cntype) end prototypes global function string f_decimaltocnf (decimal number, integer cntype);/*将数字转换为汉字大写的人民币格式或数字格式。 如:输入 1999.23 转换为人民币:壹仟玖佰玖拾玖元贰角叁分 转换为数字为:壹仟玖佰玖拾玖点贰叁 用法: 输入数字类型变量:number 返回字符串: cnstr 参数整型变量:cntype: =0时,转换为人民币,=1时,转换为数字 **<返回数字不大于18位精确值> cnstr=f_decimaltocn(number,cntype) */ string numstr[11]={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖","拾"} string str1="",str2="",intstr="",decstr=""//整数部分,小数部分,大写整数部分,大写小数部分 string num[]//各个数位段,即每四位为一段 string n[]//各位数字 string number1,number2,number3//定义数字的三个数位段 int pointpos if cntype=0 then //如果转换为人民币大写,小数位数只取2位 number=round(number,2) if isnull(number) then messagebox("错误","转换为人民币大写的数字整数位数最大17位!") return '' end if end if pointpos=pos(string(number),".") if pointpos=0 then//输入值为纯整数 str1=string(number) str2="" else //输入值为浮点数 str1=left(string(number),pointpos -1)//取整数部分 str2=right(string(number),len(string(number)) -pointpos)//取小数部分 end if if dec(str2)=0 then //如果小数部分为0,则取消小数部分的分析 str2="" end if //*****分析转换整数部分***** choose case len(str1) case is>8//分析整数部分在100000000以上的 num[1]=left(str1,len(str1) -8)//按每4位为一段拆分成三段,逐段分析 num[2]=left(right(str1,8),4) num[3]=right(str1,4) number1=f_decimaltocn(dec(num[1]),1)+"亿"//若干亿 if mid(num[2],1,1)="0" then//分析千万位 n[1]=numstr[1]//若该位为0,则数位赋值“零” else n[1]=numstr[integer(mid(num[2],1,1))+1]+"仟" end if if mid(num[2],2,1)="0" then//分析百万位 if mid(num[2],1,1)="0" then n[2]=""//若千万位为0,则该位为空 else n[2]=numstr[1] end if else n[2]=numstr[integer(mid(num[2],2,1))+1]+"佰" end if if mid(num[2],3,1)="0" then//分析十万位 if mid(num[2],2,1)="0" then n[3]="" else n[3]=numstr[1] end if else n[3]=numstr[integer(mid(num[2],3,1))+1] +"拾" end if if mid(num[2],4,1)="0" then//分析万位 n[4]="" else n[4]=numstr[integer(mid(num[2],4,1))+1] end if // if right(num[2],3)="000" then//当末尾有000时 n[2]="" n[3]="" n[4]="" end if if right(num[2],2)="00" then//当末尾有00时 n[3]="" n[4]="" end if if right(num[2],1)="0" then//当末尾有0时 n[4]="" end if // if mid(num[3],1,1)="0" then//分析千位 n[5]=numstr[1] else n[5]=numstr[integer(mid(num[3],1,1))+1]+"仟" end if if mid(num[3],2,1)="0" then//分析百位 if mid(num[3],1,1)="0" then n[6]="" else n[6]=numstr[1] end if else n[6]=numstr[integer(mid(num[3],2,1))+1]+"佰" end if if mid(num[3],3,1)="0" then//分析十位 if mid(num[3],2,1)="0" then n[7]="" else n[7]=numstr[1] end if else n[7]=numstr[integer(mid(num[3],3,1))+1] +"拾" end if if mid(num[3],4,1)="0" then//分析个位 n[8]="" else n[8]=numstr[integer(mid(num[3],4,1))+1] end if // if right(num[3],3)="000" then//当末尾有000时 n[6]="" n[7]="" n[8]="" end if if right(num[3],2)="00" then//当末尾有00时 n[7]="" n[8]="" end if if right(num[3],1)="0" then//当末尾有0时 n[8]="" end if // //统计 number2=n[1]+n[2]+n[3]+n[4]+"万" if num[3]="0000" then number3="" if num[2]="0000" then number2="" end if else if num[2]="0000" then number2=numstr[1] end if number3=n[5]+n[6]+n[7]+n[8] end if //取得整数位值 intstr=number1+number2+number3 case 5 to 8//分析整数部分在10000~99999999之间的 num[1]=left(str1,len(str1) -4)//取得第一段(千万位到万位) //不足4位,用'0'补齐 if len(num[1])=3 then num[1]="0"+num[1] end if if len(num[1])=2 then num[1]="00"+num[1] end if if len(num[1])=1 then num[1]="000"+num[1] end if num[2]=right(str1,4)//取得第二段(千位到个位) number1="" if mid(num[1],1,1)="0" then//分析千万位 n[1]="" else n[1]=numstr[integer(mid(num[1],1,1))+1]+"仟" end if if mid(num[1],2,1)="0" then//分析百万位 if mid(num[1],1,1)="0" then n[2]="" else n[2]=numstr[1] end if else n[2]=numstr[integer(mid(num[1],2,1))+1]+"佰" end if if mid(num[1],3,1)="0" then//分析十万位 if mid(num[1],2,1)="0" then n[3]="" else n[3]=numstr[1] end if else n[3]=numstr[integer(mid(num[1],3,1))+1] +"拾" end if if mid(num[1],4,1)="0" then//分析万位 n[4]="" else n[4]=numstr[integer(mid(num[1],4,1))+1] end if // if right(num[1],3)="000" then//当末尾有000时 n[2]="" n[3]="" n[4]="" end if if right(num[1],2)="00" then//当末尾有00时 n[3]="" n[4]="" end if if right(num[1],1)="0" then//当末尾有0时 n[4]="" end if // if mid(num[2],1,1)="0" then//分析千位 n[5]=numstr[1] else n[5]=numstr[integer(mid(num[2],1,1))+1]+"仟" end if if mid(num[2],2,1)="0" then//分析百位 if mid(num[2],1,1)="0" then n[6]="" else n[6]=numstr[1] end if else n[6]=numstr[integer(mid(num[2],2,1))+1]+"佰" end if if mid(num[2],3,1)="0" then//分析十位 if mid(num[2],2,1)="0" then n[7]="" else n[7]=numstr[1] end if else n[7]=numstr[integer(mid(num[2],3,1))+1] +"拾" end if if mid(num[2],4,1)="0" then//分析个位 n[8]="" else n[8]=numstr[integer(mid(num[2],4,1))+1] end if // if right(num[2],3)="000" then//当末尾有000时 n[6]="" n[7]="" n[8]="" end if if right(num[2],2)="00" then//当末尾有00时 n[7]="" n[8]="" end if if right(num[2],1)="0" then//当末尾有0时 n[8]="" end if // //统计 if num[2]="0000" then number3="" else number3=n[5]+n[6]+n[7]+n[8] end if number2=n[1]+n[2]+n[3]+n[4]+"万" //取得整数位值 intstr=number1+number2+number3 case else//分析整数部分不到10000的 num[1]=str1 //不足4位,用'0'补齐 if len(num[1])=3 then num[1]="0"+num[1] end if if len(num[1])=2 then num[1]="00"+num[1] end if if len(num[1])=1 then num[1]="000"+num[1] end if number1="" number2="" if mid(num[1],1,1)="0" then//分析千位 n[1]="" else n[1]=numstr[integer(mid(num[1],1,1))+1]+"仟" end if if mid(num[1],2,1)="0" then//分析百位 if mid(num[1],1,1)="0" then n[2]="" else n[2]=numstr[1] end if else n[2]=numstr[integer(mid(num[1],2,1))+1]+"佰" end if if mid(num[1],3,1)="0" then//分析十位 if mid(num[1],2,1)="0" then n[3]="" else n[3]=numstr[1] end if else n[3]=numstr[integer(mid(num[1],3,1))+1] +"拾" end if if mid(num[1],4,1)="0" then//分析个位 n[4]="" else n[4]=numstr[integer(mid(num[1],4,1))+1] end if // if right(num[1],3)="000" then//当末尾有000时 n[2]="" n[3]="" n[4]="" end if if right(num[1],2)="00" then//当末尾有00时 n[3]="" n[4]="" end if if right(num[1],1)="0" then//当末尾有0时 n[4]="" end if // //统计 number3=n[1]+n[2]+n[3]+n[4] ////取得整数位值 intstr=number1+number2+number3 end choose if str1="0" then//如果整数为零,转换为"零" intstr=numstr[1] end if //*****分析和转换小数部分***** if cntype=0 then//如果转换为人民币表达式 // if len(str2)>2 then//如果小数位数大于2,就四舍五入. // str2=right(string(round(double("0"+"."+str2),2)),2) // end if if mid(str2,1,1)="0" then n[1]="零" else n[1]=numstr[integer(mid(str2,1,1))+1]+"角" end if if mid(str2,2,1)='0' then n[2]="" else n[2]=numstr[integer(mid(str2,2,1))+1]+"分" end if decstr=n[1]+n[2] end if if cntype=1 then//如果转换为数字表达式 int decpos for decpos=1 to len(str2) n[decpos]=numstr[integer(mid(str2,decpos,1))+1] decstr=decstr+n[decpos] next end if //输出本函数的结果*********************** if cntype=0 then//将数字字串转换为人民币的大写格式 if str2="" then//如果为纯整数 return intstr+"元整" else if intstr="零" then//如果整数为零,就只显示小数 return decstr else return intstr+"元"+decstr+"整" end if end if end if if cntype=1 then//将数字字串转换为普通大写格式 if str2="" then//如果为纯整数 return intstr else return intstr+"点"+decstr end if end if //完毕OK end function