人民幣小寫轉大寫的一般方法。還可以
const char* RMB(double rmb)
{
if(rmb<0) return NULL;
static char *CCC[10]={ //Capital form of Chinese character
"零","壹","貳","叄","肆","伍","陸","柒","捌","玖"
};
static char *QQQ[19]={"分","角",".","圓","拾","佰","仟","萬","拾","佰","仟","億",
"拾","佰","仟","萬","拾","佰","仟"
};
static char result[256],tmp[256];
sprintf(tmp,"%.2lf",rmb);
if(strlen(tmp)>19) return NULL;
int i=strlen(tmp)-1,c;
char *srcPtr=tmp,*dstPtr=result;
bool bPrevZero=false;
for(; *srcPtr; srcPtr++,i--) {
if(*srcPtr=='.') continue;
c=*srcPtr-'0';
if(c!=0) {
strcpy(dstPtr,CCC[c]); dstPtr+=2;
if(srcPtr==tmp && c==1 && strcmp(QQQ[i],"拾")==0) dstPtr-=2;
strcpy(dstPtr,QQQ[i]); dstPtr+=2;
bPrevZero=false;
continue;
}
if(bPrevZero) {
if(strcmp(QQQ[i],"圓")==0 || strcmp(QQQ[i],"萬")==0 || strcmp(QQQ[i],"億")==0) {
dstPtr-=2; *dstPtr=0;
if(strcmp(dstPtr-2,"億")) {strcpy(dstPtr,QQQ[i]); dstPtr+=2;}
bPrevZero=false;
}
} else {
if(strcmp(QQQ[i],"圓") && strcmp(QQQ[i],"萬") && strcmp(QQQ[i],"億")) {
strcpy(dstPtr,"零"); dstPtr+=2;
bPrevZero=true;
}else {
strcpy(dstPtr,QQQ[i]); dstPtr+=2;
bPrevZero=false;
}
}
}
i=strlen(result);
if(strcmp(result+i-2,"零")==0) result[i-2]=0;
tmp[0]=result[0]; tmp[1]=result[1]; tmp[2]=0;
if(strcmp(tmp,"圓")==0) {
if(result[2]==0) strcpy(result,"零圓");
else {
tmp[0]=result[2]; tmp[1]=result[3]; tmp[2]=0;
return strcmp(tmp,"零")==0 ? result+4 : result+2 ;
}
}
return result;
}