把数字转换成人民币大写形式【C/C++】

 

(转自:http://www.cnitblog.com/jackrain/archive/2005/10/14/3293.aspx)

       把阿拉伯数字钱币转换汉字大写形式是经常要用到的,这里就用C/C++来实现之。首先我们把数字分成两部分:整数部分+小数部分;分离很简单,就是用m - (int)m就可以了。(m为金额)。因为对于人民币来说,小数只留两位即可,所以小数部分很容易实现。对于整数部分,只要实现2点,一是要把数字转换成汉字大写,比如数字2,转换成贰。再一点就是加上计数单位,比如仟、佰、拾,还有亿、万等。这一点主要利用数字顺序和数组的结构来实现。

       具体代码如下:
/**/ /*---------------------------------------------------------------------
 *-----------------------ConvertMoneyCaps.cpp-------------------------
 *-----------------------Date : 10--15--2005-------------------------
 *----------------------All Rights Shared----------------------------
 *---------------------jack.fandlr@gmail.com------------------------
 *-------------------------------------------------------------------*/

#include  < iostream >
#include  < string >
#include  < stdlib.h >
using   namespace  std;

string  ConvertMoneyCaps( long   double  moneySum)
{
    long int temp_i = (long int)moneySum;  /**//* 整数部分 */
    float temp_f = moneySum - temp_i; /**//* 小数部分 */
    int digit = 0, i, j, k, num_i;
    string money("");
    char num[20], *p;
    char name[][3] = {"元","拾","佰","仟","万","亿"};
    char numchar[][3] = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
    ltoa(temp_i, num, 10);  /**//* 整数部分转换成字符串后在处理 */
    p = num;
    digit = strlen(num);            /**//* 整数部分位数 */
    /**//*--------处理整数部分 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];
            }

            else
            {
                if(k && (*(p + 1) &0xF))
                    money += "零";
            }

            /**//*--------转换数字结束-------*/
            /**//*---------添加计数单位开始----*/
            if(k)
            {
                if(num_i)
                money = money + name[k];
            }

            else
            {
                j = digit - i;
                if(j)
                    money = money + name[j/4 + 3];
                else
                    money += "元";
            }

            /**//*--------添加计数单位结束--------*/
            p++;
        }

        else
        {
            money = "遇到非数字退出!";
            return money;
        }

    }

    /**//*--------处理整数部分 End --------*/
    /**//*--------处理小数部分 start--------*/
    if(temp_f > 0.01)
    {
        if((int)(temp_f*10)) money = money + numchar[(int)(temp_f*10)] + "角";
        if((int)(temp_f*100)%10) money = money + numchar[(int)(temp_f*100)%10] + "分";
    }

    /**//*--------处理小数部分 End--------*/
    money += "整";

    return money;
}

int  main()
{
    long double x = 33.20;
    cout << "please input the money:";
    cin >> x;
    cout << "Convert Money Caps:";
    string money = ConvertMoneyCaps(x);
    cout << money <<endl;
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值