Function (stringvar number)
(
stringvar str1 := "零壹贰叁肆伍陆柒捌玖"; //0-9所对应的汉字
stringvar str2 := "万仟佰拾亿仟佰拾万仟佰拾元角分"; //数字位所对应的汉字
stringvar str3 := ""; //从原num值中取出的值
stringvar str4 := ""; //数字的字符串形式
stringvar str5 := ""; //人民币大写金额形式
numbervar i:=0; //循环变量
numbervar j:=0; //num的值乘以100的字符串长度
stringvar ch1 := ""; //数字的汉语读法
stringvar ch2 := ""; //数字位的汉字读法
numbervar nzero := 0; //用来计算连续的零值是几个
numbervar temp; //从原num值中取出的值
numbervar num := Round(Abs(tonumber(number)),2); //将num取绝对值并四舍五入取2位小数
str4 := totext(tonumber(num*100),0); //将num乘100并转换成字符串形式
str4:=replace(str4,",","");
j := Length(str4); //找出最高位
if j > 15 then
"字符串太长"
else
(
str2 := mid(str2,15-j+1); //取出对应位数的str2的值。如:200.55,j为5所以str2=佰拾元角分
//循环取出每一位需要转换的值
for i:=1 to j step 1 do
(
str3 :=mid(str4,i,1); //取出需转换的某一位的值
temp := int(tonumber(str3)); //转换为数字
if (i <> (j-3) and i <> (j-7) and i <> (j-11) and i <> (j-15)) then
(
//当所取位数不为元、万、亿、万亿上的数字时
if (str3 = "0") then
(
ch1 := "";
ch2 := "";
nzero := nzero + 1;
)
else
(
if(str3 <> "0" and nzero <> 0) then
(
ch1 := "零" + mid(str1,temp*1+1,1);
ch2 := mid(str2,i,1);
nzero := 0;
)
else
(
ch1 := mid(str1,temp*1+1,1);
ch2 := mid(str2,i,1);
nzero := 0;
)
)
)
else
(
//该位是万亿,亿,万,元位等关键位
if (str3 <> "0" and nzero <> 0) then
(
ch1 := "零" + mid(str1,temp*1+1,1);
ch2 := mid(str2,i,1);
nzero := 0;
)
else
(
if (str3 <> "0" and nzero = 0) then
(
ch1 := mid(str1,temp*1+1,1);
ch2 := mid(str2,i,1);
nzero := 0;
)
else
(
if (str3 = "0" and nzero >= 3) then
(
ch1 := "";
ch2 := "";
nzero := nzero + 1;
)
else
(
if (j >= 11) then
(
ch1 := "";
nzero := nzero + 1;
)
else
(
ch1 := "";
ch2 := mid(str2,i,1);
nzero := nzero + 1;
)
)
)
)
);
if i = (j-11) or i = (j-3) then
(
//如果该位是亿位或元位,则必须写上
ch2 := mid(str2,i,1);
) ;
str5 := str5 + ch1 + ch2;
if (i = j-1 and str3 = "0" ) then
(
//最后一位(分)为0时,加上“整”
str5 := str5 + '整';
) ;
);
if (num = 0) then
(
str5 := "零元整";
) ;
str5
)
)