人民幣大寫金額轉換 c語言

int  ConvertMoneyCaps(double moneySum,char * money_chinese)
{
    long int temp_i = (long )moneySum;  /* 整數部分 */
    float temp_f = moneySum - temp_i; /* 小數部分 */
    int digit = 0, i, j, k, num_i;
    char money[25];   
    char num[20], *p;
    char name[][3] = {"元","拾","佰","仟","萬","億"};
    char numchar[][3] = {"零","壹","貳","叄","肆","伍","陸","柒","捌","玖"};
    /*ltoa(temp_i, num, 10);  *//* 整數部分轉換成字符串後在處理 */   
    memset(num,0,sizeof(num));
    sprintf(num,"%d",temp_i);
    p = num;
    digit = strlen(num);            /* 整數部分位數 */
    memset(money,0,sizeof(money));
   
    /*--------處理整數部分 start--------*/
    for(i = 1; i <= digit; i ++)
    {
        k = (digit - i) % 4;
        if(isdigit(*p))
        {
            num_i = *p & 0xF; /* 把字符轉換成數字,比如 '0'-> 0,'1' -> 1*/
            /*--------轉換數字開始---------*/
            if(num_i)
            {
                /*money = money+ numchar[num_i];*/
                sprintf(money,"%s%s",money,numchar[num_i]);
            }
            else
            {
                if(k && (*(p + 1) &0xF))
                 sprintf(money,"%s零",money);
                    /*money += "零";*/
                   
            }
            /*--------轉換數字結束-------*/
            /*---------添加計數單位開始----*/
            if(k)
            {
                if(num_i)
                 sprintf(money,"%s%s",money,name[k]);
                /*money = money + name[k];*/
              
            }
            else
            {
                j = digit - i;
                if(j)
                {
                    /*money = money + name[j/4 + 3];*/
                    sprintf(money,"%s%s",money,name[j/4 + 3]);
                    }
                else
                {
                    /* money += "元";*/
                     sprintf(money,"%s元",money);
                    }
            }
            /*--------添加計數單位結束--------*/
            p++;
        }
        else
        {
            /*money = "遇到非數字退出!";*/
             sprintf(money,"遇到非數字退出!");
            return 1;
        }
    }
    /*--------處理整數部分 End --------*/
    /*--------處理小數部分 start--------*/
    printf("%.2f/n",temp_f);
    if(temp_f > 0.01)
    {
      temp_f=temp_f+0.005;
        if((int)(temp_f*10))
        {
         /*money = money + numchar[(int)(temp_f*10)] + "角";*/
         sprintf(money,"%s%s角",money,numchar[(int)(temp_f*10)]);
        }
        if((int)(temp_f*100)%10)
        {
        /*money = money + numchar[(int)(temp_f*100)%10] + "分";*/
        sprintf(money,"%s%s分",money,numchar[(int)(temp_f*100)%10]);
        }
    }
    /*--------處理小數部分 End--------*/
    /*money += "整";*/
    sprintf(money,"%s整",money);
   
    strncpy(money_chinese,money,25);
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章