数字大写
//********************************************************
// 模块:数字转换为中文大写
#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;
}