C# 人民币(RMB)转化为大写字母

来源:互联网 发布:施耐德选型软件 编辑:程序博客网 时间:2024/05/01 05:29
  public class ToChineseValue
    
{        
        
private enum chineseChar{零,壹,贰,叁,肆,伍,陆,柒,捌,玖};
        
private enum charValue{个=1,十,百,千}
        
private enum c{元=1,万,亿,兆};
        
private enum afterPoint{角,分};
        
public ToChineseValue()
        
{
            
//
            
// TODO: 在此处添加构造函数逻辑
            
//
        }

        
public string toChineseChar(decimal d)
        
{
            
decimal flag=0;
            
if(d<0)
            
{
                flag
=d;
                d
=-d;
            }

            
            
string strChinese="";
            
string nextString="";

            System.Globalization.NumberFormatInfo fmat
=new System.Globalization.NumberFormatInfo();
            fmat.CurrencyDecimalDigits
=2;            
            fmat.CurrencySymbol
="";                
            fmat.CurrencyGroupSizes 
=new int []{4,4,4,4};
            fmat.CurrencyGroupSeparator
=",";

            
string strx=d.ToString("c",fmat);        
            
string []afterArray=strx.ToString() .Split ('.');

            
char[] prePoint=afterArray[0].ToCharArray ();
            
char [] nextChar=afterArray[1].ToCharArray ();                
            
            
if(System.Convert .ToDecimal (afterArray[0].ToString ())==0)
            
{ strChinese="";}
            
else
            
{            
                
string [] str=afterArray[0].ToString().Split (',');
                
int Num=str.Length ;        
                
//交错数组用来放四个一组的数组
                char[][]part=new char [Num][];        
                
for(int i=0;i<str.Length ;i++)
                
{                
                    part[i]
=str[i].ToCharArray ();                
                }
        
                
for(int i=0;i<Num;i++)
                
{                
                    
for(int j=0;j<part[i].Length;j++)                
                    
{
                        
//用枚举完成汉字的转换
                        strChinese+=((chineseChar)int.Parse (part[i][j].ToString ())).ToString ();
                        
//用枚举完成单位: 个 十 百 千 
                        strChinese+=((charValue)(part[i].Length-j)).ToString();                        
                    }
    
                    
//以下为处理元 万 亿 兆 
                    strChinese+=((c)(part.Length-i)).ToString();
                }
                
            }
            
            
//处理点号后面的小数部分        
            if(System.Convert.ToDecimal(afterArray[1].ToString ())==0&&System.Convert.ToDecimal(afterArray                           [0].ToString ())!=0)
            
{
                nextString
="";
            }

            
else
            
{    
                
for(int i=0;i<2;i++)
                
{    
                    
int t=int.Parse (nextChar[i].ToString ());                
                    nextString
+=((chineseChar)int.Parse (nextChar[i].ToString ())).ToString ();
                    nextString
+=((afterPoint)(i)).ToString();
                    
if(t==0)
                    
{
                        StringBuilder str
=new StringBuilder(nextString);                                            
                        nextString
=str.Replace ("零零","").ToString ();
                        nextString
=str.Replace ("零角零分","零元").ToString ();                        
                    }

                }
                
            }
                
            StringBuilder sb
=new StringBuilder(strChinese);    
            
for(int i=0;i<4;i++)
            
{    
                strChinese
=sb.Replace ("","").ToString ();                
                strChinese
=sb.Replace ("零元","").ToString ();
                strChinese
=sb.Replace ("零万","").ToString ();
                strChinese
=sb.Replace ("亿万","亿").ToString ();
                strChinese
=sb.Replace ("零亿","亿").ToString ();
                strChinese
=sb.Replace ("零十","").ToString ();
                strChinese
=sb.Replace ("零百","").ToString ();
                strChinese
=sb.Replace ("零千","").ToString ();
                strChinese
=sb.Replace ("零零","").ToString ();
                strChinese
=sb.Replace ("零角零分","").ToString ();
            }

            
if(flag>=0)
            
{
                
return strChinese+nextString;
            }

            
return ""+strChinese+nextString;
        }

    }