阿拉伯数字转换成金额大写金额(包括小数)

///   <summary>
///  转换人民币大小金额  
///   </summary>   
///   <param name="num"> 金额 </param>   
///   <returns> 返回大写形式 </returns>   
public   static   string  CmycurD( decimal  num)
{
    
string  str1  =   " 零壹贰叁肆伍陆柒捌玖 " ;                // 0-9所对应的汉字
     string  str2  =   " 万仟佰拾亿仟佰拾万仟佰拾元角分 " ;      // 数字位所对应的汉字
     string  str3  =   "" ;                                    // 从原num值中取出的值
     string  str4  =   "" ;                                    // 数字的字符串形式
     string  str5  =   "" ;                                    // 人民币大写金额形式
     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  ( int  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;
}

 

 

转载...

转载于:https://www.cnblogs.com/haiyang1985/archive/2009/03/03/1402353.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值