初日 最新 目次 MAIL HOME


*-- To Tell The Truth --*
Cruz
MAIL
HOME

My追加

2001年07月10日(火)
小物製作

金額データを受け取るのだが、そのデータは+000035000
なんて形の固定長。
ビジュアル的に、このままだと客受けしないので、
金額らしい文字列に変換する関数を作成する。

// 金額文字列変換関数
char *cmn_Money(char *cpBaseMoney)
{
 char *p = (char *)malloc(sizeof(cpBaseMoney) + 1);
 char *m = (char *)malloc(sizeof(cpBaseMoney) + 4);
 int ip;
 int im;
 int iMoney;
 int g = 0;

 iMoney = atoi(&cpBaseMoney[1]);

 memset(p, 0, sizeof(p));
 memset(m, 0, sizeof(m));
 sprintf(p, "%d", iMoney);

 ip = strlen(p);
 if(ip < 4)
  im = ip + 2; /* カンマなし、符号、\ */
 else if(ip < 7)
  im = ip + 3; /* カンマ1つ、符号、\ */
 else
  im = ip + 4; /* カンマ2つ、符号、\ */

 while(1){
  if((g != 0) && ((g % 4) == 0)){
   m[im] = 0x2c; /* , 代入 */
   m[--im] = p[ip];
  }else{
   m[im] = p[ip];
  }
  if(ip == 0){
   m[im] = p[ip];
   break;
  }
  im--;
  ip--;
  g++;
 }

 // 符号と\をつける
 m[--im] = 0x5c; /* \ 代入 */
 m[--im] = cpBaseMoney[0];
 return m;
}

+000035000な金額データを+\35,000に変換する。
受け取るデータが符号付10桁の固定長(数値部分は9桁)って決まっているので、
付加するカンマの数も数値9桁以上には対応させていない。
なんでwhileループが無限になっていてip==0条件で抜けているかとか、
そのへんの細かいことは、その時の気分で作っているので聞かないで・・・。

ちなみに","と"\"が、文字コード0x2c、0x5cとなっているのは、
このプログラムがwinで動くから。(s-jisってこと)