格式化 金额数据

如何方法的向一个金额数据添加 分节符,不限于三位分节

以下是一个很好的实现方法

int TMoneyFMT(double dbl, char *fmt, char *str)
{
    int  iRet = 1;
    int  mLen = strlen(fmt);
    char *s, *d, *p;
    char temp[31];
    sprintf(temp, "%.2lf", dbl);  /* 将 dbl 转化为基本字符串 */
    memset(str, ' ', mLen);
    str[mLen] = 0x0;
    d = temp + strlen(temp) - 1;  /* 指向 dbl 字符串的结束位置 */
    s = fmt  + mLen - 1;          /* 指向模板串的结束位置 */
    p = str  + mLen - 1;          /* 指向目标串的结束位置 */
    for( ; s > fmt-1 && iRet ; s--, p-- )
    {
        switch( *s )   /* 对格式化串中数据进行分析 */
        {
            case '9' :
                *p = *d --;
                if(d == temp-1) iRet = 0;
                break;
            case  '0' :
                if(d > temp-1 ) *p = *d --;
                else  *p = '0';  /* 按照模板要求, 添加前导 '0' */
                break;
            case  '.' :
                if( *d=='.') *p = *d --;
                break;
            default :
                *p = *s ;
                break;
        }
    }
    /* 去除 str 前面多余的空格 */
    s = d = str;
    while( *s )
    {
        if( *s != ' ') *d ++ = *s ;
        s ++ ;
    }
    *d = 0x0 ;
    return d-str ;
}

程序调用方法

 TMoneyFMT(jioyje, "999,999,999,990.99", sJYJE);    // 格式化一个交易金额数据

TMoneyFMT(jioyje, "9999,9999,9990.99", sJYJE);    // 同样支持 4 位分节,数据更加容易读出

这是一个格式化处理函数,使用 ‘0’ 标志,则意味着输入数据小于 1.00 时候,可以得到 0.XX  的输出效果

你可能感兴趣的:(格式化 金额数据)