[C#]数字到大写中文的转换(Money)

using  System;

namespace  xxxxxxx
{
    
/// <summary>
    
/// 本类实现阿拉伯数字到大写中文的转换
    
/// 该类没有对非法数字进行判别
    
/// 请调用NumToChn方法
    
/// </summary>

    public class Money
    
{
        
/// <summary>
        
/// 金额类
        
/// </summary>

        public Money()
        
{
        
        }

        
private static char chrToNum(char x)
        
{
            
string chnNames="零壹贰叁肆伍陆柒捌玖";
            
string numNames="0123456789";
            
return chnNames[numNames.IndexOf(x)];
        }

        
private static string TenthousandToNum(string x)
        
{
            
string[] stringArrayLevelNames=new string[4{"","","",""};
            
string ret="";
            
int i;
            
for (i=x.Length-1;i>=0;i--)
                
if (x[i]=='0')
                    ret
=chrToNum(x[i])+ret;
                
else
                    ret
=chrToNum(x[i])+stringArrayLevelNames[x.Length-1-i]+ret;
            
while ((i=ret.IndexOf("零零"))!=-1)
                ret
=ret.Remove(i,1);
            
if (ret[ret.Length-1]=='' && ret.Length>1)
                ret
=ret.Remove(ret.Length-1,1);
            
//            if (ret.Length>=2 && ret.Substring(0,2)=="壹拾")
            
//                ret=ret.Remove(0,1);
            return ret;
        }

        
private static string chgIntegerPart(string x)
        
{
            
int len=x.Length;
            
string ret,temp;
            
if (len<=4)
                ret
=TenthousandToNum(x);
            
else if (len<=8)
            
{
                ret
=TenthousandToNum(x.Substring(0,len-4))+"";
                temp
=TenthousandToNum(x.Substring(len-4,4));
                
if (temp.IndexOf("")==-1 && temp!="")
                    ret
+=""+temp;
                
else
                    ret
+=temp;
            }

            
else
            
{
                ret
=TenthousandToNum(x.Substring(0,len-8))+"亿";
                temp
=TenthousandToNum(x.Substring(len-8,4));
                
if (temp.IndexOf("")==-1 && temp!="")
                    ret
+=""+temp;
                
else
                    ret
+=temp;
                ret
+="";
                temp
=TenthousandToNum(x.Substring(len-4,4));
                
if (temp.IndexOf("")==-1 && temp!="")
                    ret
+=""+temp;
                
else
                    ret
+=temp;
            }

            
int i;
            
if ((i=ret.IndexOf("零万"))!=-1)
                ret
=ret.Remove(i+1,1);
            
while ((i=ret.IndexOf("零零"))!=-1)
                ret
=ret.Remove(i,1);
            
if (ret[ret.Length-1]=='' && ret.Length>1)
                ret
=ret.Remove(ret.Length-1,1);
            
return ret;
        }


        
private static string chgDecimalPart(string x)
        
{
            
string ret="";
            
for (int i=0;i<x.Length && i<2;i++)
            
{
                
switch(i)
                
{
                    
case 0:
                        ret
+=chrToNum(x[i])+"";
                        
break;
                    
case 1:
                        ret
+=chrToNum(x[i])+"";
                        
break;
                }

            }

            
return ret;
        }

        
/// <summary>
        
/// 将阿拉伯小写金额转换成大写金额
        
/// </summary>
        
/// <param name="x"></param>
        
/// <returns></returns>

        public static string NumToChn(string x)
        
{
            
if (x.Length==0)
                
return "";
            
string ret="";
            
if (x[0]=='-')
            
{
                ret
="";
                x
=x.Remove(0,1);
            }

            
if (x[0].ToString()==".")
                x
="0"+x;
            
if (x[x.Length-1].ToString()==".")
                x
=x.Remove(x.Length-1,1);
            
//if (x.IndexOf(".")>-1) 2005-09-13,Szg,Modify
            if (x.IndexOf(".")>-1)
            
{
                
if(Convert.ToDecimal("0"+x.Substring(x.IndexOf(".")))>0)
                
{
                    ret
+=chgIntegerPart(x.Substring(0,x.IndexOf(".")))+""+chgDecimalPart(x.Substring(x.IndexOf(".")+1));
                }

                
else
                
{
                    ret
+=chgIntegerPart(Convert.ToDecimal(x).ToString("0"))+"元整";
                }

            }

            
else
            
{
                ret
+=chgIntegerPart(x)+"元整";
            }

            
return ret;
        }

    }

    
/* END CLASS DEFINITION Money */
}

 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值