把数字转换成人民币大写形式【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 
= *& 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;
}

 

你可能感兴趣的:(把数字转换成人民币大写形式【C/C++】)