数字转换为中文大写

//   模块:数字转换为中文大写

#include "stdafx.h"
static char   *unit1[] = { "拾","佰","仟" };
static char   *unit2[] = { "万","亿"  };
static char   *digital[] = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};

//   功能:将万以内的数据转换成字符,字符串与阅读方面相反
//   long level[in]:要转换的数据
//   char *buf[out]:字符输出
//   备注:内部函数
//******************************************************
static void GetLevelText(long level,char *buf)
{
   int digit;
   BOOL bPreZero=FALSE;
   BOOL bZeroValidate=FALSE;
   int i=0;
   int  unit=-1;
   while(level){
      digit=level%10;
      if(digit)
      {
         if(bPreZero&&bZeroValidate)
         {
            strcat(buf,digital[0]);
            i+=2;
         }
         if(unit!=-1)// buf[i++]=unit1[unit];//unit
         {
            strcat(buf,unit1[unit]);
            i+=2;
         }
         strcat(buf,digital[digit]);
         i+=2;
         bPreZero=FALSE;
         bZeroValidate=TRUE;
      }else
      {
         bPreZero=TRUE;
      }
      unit++;
      level/=10;
   }
   buf[i]=0;
}

//************************************************************
//   功能:数据转换成中文字符
//   long num[in]:要转换的数据
//   char *buf[out]:字符输出
//  返回值:TRUE-转换成功,FALSE-失败,数据超过处理范围
//************************************************************
BOOL Num2UpDigit(long num,char *buf)
{
   long level1,level2,level3;
   char level1buf[17]={0},level2buf[17]={0},level3buf[17]={0};
   int  p=0;
   level1=num%10000;
   num/=10000;
   level2=num%10000;
   num/=10000;
   level3=num;
   if(num/10000) return FALSE;//超过数据处理范围
   
   //将数据分成三级
   if(level1)   GetLevelText(level1,level1buf);
   if(level2)   GetLevelText(level2,level2buf);
   if(level3)   GetLevelText(level3,level3buf);
   
   if(level3){
      for(int i=strlen(level3buf)-2;i>=0;i-=2)
      {
         memcpy(buf+p,level3buf+i,2);
         p+=2;
      }
      memcpy(buf+p,unit2[1],2);//级别单位
      p+=2;
   }
   if(level2){
      if(level3&&level2/1000==0)//加零
      {
         memcpy(buf+p,digital[0],2);
         p+=2;
      }
      for(int i=strlen(level2buf)-2;i>=0;i-=2)
      {
         memcpy(buf+p,level2buf+i,2);
         p+=2;
      }
      memcpy(buf+p,unit2[0],2);//级别单位
      p+=2;
   }else if(level3&&level1)//加零
   {
      memcpy(buf+p,digital[0],2);
      p+=2;
   }
   if(level1){
      if((level2||level3)&&level1/1000==0&&!(level3&&!level2))//加零
      {
         memcpy(buf+p,digital[0],2);
         p+=2;
      }
      for(int i=strlen(level1buf)-2;i>=0;i-=2)
      {
         memcpy(buf+p,level1buf+i,2);
         p+=2;
      }
   }
   buf[p]=0;
   return TRUE;
}

你可能感兴趣的:(数字转换为中文大写)