水晶报表金额大写函数

来源:互联网 发布:vb bartender二次开发 编辑:程序博客网 时间:2024/05/17 20:27

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
    )

原创粉丝点击