posts - 32, comments - 59, trackbacks - 0, articles - 2
  IT博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理
       把阿拉伯数字钱币转换汉字大写形式是经常要用到的,这里就用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;
}

当然,以上代码是有些问题的,比如未曾对输入数字做严格的检查,还有处理数字的范围问题。

Feedback

# re: 把数字转换成人民币大写形式【C/C++】  回复  更多评论   

2007-05-29 12:14 by 方显明
105000元如何大写

# re: 把数字转换成人民币大写形式【C/C++】  回复  更多评论   

2007-06-14 17:19 by
8070.28

# re: 把数字转换成人民币大写形式【C/C++】  回复  更多评论   

2011-05-11 18:10 by friendjiao
很多BUG!!!!!!!!!!!!!!!!!!!!

# re: 把数字转换成人民币大写形式【C/C++】  回复  更多评论   

2012-10-23 13:32 by 李鑫
没有bug啊
只有注册用户登录后才能发表评论。