人民幣小寫轉大寫的一般方法

人民幣小寫轉大寫的一般方法。還可以

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;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章