C#通用类库--数字转为人民币汉字大写表示

复制代码
// 类名:EcanRMB
// 作用:数字转换为人民币大写
// 作者:刘典武
// 时间:2010-12-04

using  System;
using  System.Collections.Generic;
using  System.Text;

namespace  Ecan
{
    
public   class  EcanRMB
    {
        
///   <summary>
        
///  转换人民币大小金额
        
///   </summary>
        
///   <param name="num"> 金额 </param>
        
///   <returns> 返回大写形式 </returns>
         public   string  CmycurD( decimal  num)
        {
            
string  str1  =   " 零壹贰叁肆伍陆柒捌玖 " ;             // 0-9所对应的汉字
             string  str2  =   " 万仟佰拾亿仟佰拾万仟佰拾元角分 " // 数字位所对应的汉字
             string  str3  =   "" ;     // 从原num值中取出的值
             string  str4  =   "" ;     // 数字的字符串形式
             string  str5  =   "" ;   // 人民币大写金额形式
             int  i;     // 循环变量
             int  j;     // num的值乘以100的字符串长度
             string  ch1  =   "" ;     // 数字的汉语读法
             string  ch2  =   "" ;     // 数字位的汉字读法
             int  nzero  =   0 ;   // 用来计算连续的零值是几个
             int  temp;             // 从原num值中取出的值

            num 
=  Math.Round(Math.Abs(num),  2 );     // 将num取绝对值并四舍五入取2位小数
            str4  =  (( long )(num  *   100 )).ToString();         // 将num乘100并转换成字符串形式
            j  =  str4.Length;       // 找出最高位
             if  (j  >   15 ) {  return   " 溢出 " ; }
            str2 
=  str2.Substring( 15   -  j);    // 取出对应位数的str2的值。如:200.55,j为5所以str2=佰拾元角分

            
// 循环取出每一位需要转换的值
             for  (i  =   0 ; i  <  j; i ++ )
            {
                str3 
=  str4.Substring(i,  1 );           // 取出需转换的某一位的值
                temp  =  Convert.ToInt32(str3);       // 转换为数字
                 if  (i  !=  (j  -   3 &&  i  !=  (j  -   7 &&  i  !=  (j  -   11 &&  i  !=  (j  -   15 ))
                {
                    
// 当所取位数不为元、万、亿、万亿上的数字时
                     if  (str3  ==   " 0 " )
                    {
                        ch1 
=   "" ;
                        ch2 
=   "" ;
                        nzero 
=  nzero  +   1 ;
                    }
                    
else
                    {
                        
if  (str3  !=   " 0 "   &&  nzero  !=   0 )
                        {
                            ch1 
=   " "   +  str1.Substring(temp  *   1 1 );
                            ch2 
=  str2.Substring(i,  1 );
                            nzero 
=   0 ;
                        }
                        
else
                        {
                            ch1 
=  str1.Substring(temp  *   1 1 );
                            ch2 
=  str2.Substring(i,  1 );
                            nzero 
=   0 ;
                        }
                    }
                }
                
else
                {
                    
// 该位是万亿,亿,万,元位等关键位
                     if  (str3  !=   " 0 "   &&  nzero  !=   0 )
                    {
                        ch1 
=   " "   +  str1.Substring(temp  *   1 1 );
                        ch2 
=  str2.Substring(i,  1 );
                        nzero 
=   0 ;
                    }
                    
else
                    {
                        
if  (str3  !=   " 0 "   &&  nzero  ==   0 )
                        {
                            ch1 
=  str1.Substring(temp  *   1 1 );
                            ch2 
=  str2.Substring(i,  1 );
                            nzero 
=   0 ;
                        }
                        
else
                        {
                            
if  (str3  ==   " 0 "   &&  nzero  >=   3 )
                            {
                                ch1 
=   "" ;
                                ch2 
=   "" ;
                                nzero 
=  nzero  +   1 ;
                            }
                            
else
                            {
                                
if  (j  >=   11 )
                                {
                                    ch1 
=   "" ;
                                    nzero 
=  nzero  +   1 ;
                                }
                                
else
                                {
                                    ch1 
=   "" ;
                                    ch2 
=  str2.Substring(i,  1 );
                                    nzero 
=  nzero  +   1 ;
                                }
                            }
                        }
                    }
                }
                
if  (i  ==  (j  -   11 ||  i  ==  (j  -   3 ))
                {
                    
// 如果该位是亿位或元位,则必须写上
                    ch2  =  str2.Substring(i,  1 );
                }
                str5 
=  str5  +  ch1  +  ch2;

                
if  (i  ==  j  -   1   &&  str3  ==   " 0 " )
                {
                    
// 最后一位(分)为0时,加上“整”
                    str5  =  str5  +   ' ' ;
                }
            }
            
if  (num  ==   0 )
            {
                str5 
=   " 零元整 " ;
            }
            
return  str5;
        }

        
/**/
        
///   <summary>
        
///  一个重载,将字符串先转换成数字在调用CmycurD(decimal num)
        
///   </summary>
        
///   <param name="num"> 用户输入的金额,字符串形式未转成decimal </param>
        
///   <returns></returns>
         public   string  CmycurD( string  numstr)
        {
            
try
            {
                
decimal  num  =  Convert.ToDecimal(numstr);
                
return  CmycurD(num);
            }
            
catch
            {
                
return   " 非数字形式! " ;
            }
        }
    }
}
复制代码

基本用法:

EcanRMB rmb = new EcanRMB();
MessageBox.Show ( rmb.CmycurD("4568589647.34"));

 

一个C#资源分享平台,专业分享学习高质量代码,每周期布置学习任务,激发学习C#兴趣!(QQ群:128874886)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值