大写的金额转换

 

  // 货币金额大写转换库   Money2String.dll

// 静态中文转换方法     String GetCnString(String MoneyString)
// 最大转化金额         9999999999999999.99  (16位整数位,2位小数位)
// 方法返回值           转换成功则返回非零长字串,否则返回零长字串

// 静态英文转换方法     String GetEnString(String MoneyString)
// 最大转化金额         999999999999999.99   (15位整数位,2位小数位)
// 方法返回值           转换成功则返回非零长字串,否则返回零长字串


// 程序设计 xlFancy     版本 2003.03.18.22 - 2003.04.09
// 邮箱地址 xlfancy@21cn.com

using System;

namespace Money2String
{
    
public class Money2String
    
{

        
private static readonly String   cnNumber      = "零壹贰叁肆伍陆柒捌玖";
        
private static readonly String   cnUnit        = "分角元拾佰仟万拾佰仟亿拾佰仟兆拾佰仟";

        
private static readonly String[] enSmallNumber = {"","ONE","TWO","THREE","FOUR","FIVE","SIX","SEVEN","EIGHT","NINE","TEN","ELEVEN","TWELVE","THIRTEEN","FOURTEEN","FIFTEEN","SIXTEEN","SEVENTEEN","EIGHTEEN","NINETEEN"};
        
private static readonly String[] enLargeNumber = {"TWENTY","THIRTY","FORTY","FIFTY","SIXTY","SEVENTY","EIGHTY","NINETY"};
        
private static readonly String[] enUnit        = {"","THOUSAND","MILLION","BILLION","TRILLION"};


        
// 以下是货币金额中文大写转换方法
        public static String GetCnString(String MoneyString)
        
{
            String [] tmpString  
= MoneyString.Split('.');
            String    intString  
= MoneyString;   // 默认为整数
            String    decString  = "";            // 保存小数部分字串
            String    rmbCapital = "";            // 保存中文大写字串
            int       k;
            
int       j;
            
int       n;

            
if (tmpString.Length>1)
            
{
                intString 
= tmpString[0];             // 取整数部分
                decString = tmpString[1];             // 取小数部分
            }

            decString 
+= "00";
            decString  
= decString.Substring (0,2);   // 保留两位小数位
            intString += decString;

            
try
            
{
                k 
= intString.Length -1;
                
if (k>0 && k<18)
                
{
                    
for (int i=0;i<=k;i++)
                    
{
                        j
=(int)intString[i]-48;
                        
// rmbCapital = rmbCapital + cnNumber[j] + cnUnit[k-i];     // 供调试用的直接转换
                        n = i+1 >= k ? (int)intString[k]-48:(int)intString[i+1]-48// 等效于 if( ){ }else{ }
                        if (j==0)
                        
{
                            
if(k-i==2 || k-i==6 || k-i==10 || k-i==14)
                            
{
                                rmbCapital 
+= cnUnit[k-i];
                            }

                            
else
                            
{
                                
if (n != 0)
                                
{
                                    rmbCapital  
+= cnNumber[j];
                                }

                            }

                        }

                        
else
                        
{
                            rmbCapital 
= rmbCapital + cnNumber[j] + cnUnit[k-i];
                        }

                    }


                    rmbCapital 
= rmbCapital.Replace ("兆亿万","");
                    rmbCapital 
= rmbCapital.Replace ("兆亿","");
                    rmbCapital 
= rmbCapital.Replace ("亿万","亿");
                    rmbCapital 
= rmbCapital.TrimStart('');
                    rmbCapital 
= rmbCapital.TrimStart('');

                    
return rmbCapital; 
                }

                
else
                
{
                    
return "";   // 超出转换范围时,返回零长字串
                }

            }

            
catch
            
{
                
return "";   // 含有非数值字符时,返回零长字串
            }

        }



        
// 以下是货币金额英文大写转换方法
        public static String GetEnString(String MoneyString)
        
{
            String [] tmpString  
= MoneyString.Split('.');
            String    intString  
= MoneyString;   // 默认为整数
            String    decString  = "";            // 保存小数部分字串
            String    engCapital = "";            // 保存英文大写字串
            String    strBuff1;
            String    strBuff2;
            String    strBuff3;
            
int       curPoint;
            
int       i1;
            
int       i2;
            
int       i3;
            
int       k;
            
int       n;
    
            
if (tmpString.Length >1)
            
{
                intString 
= tmpString[0];             // 取整数部分
                decString = tmpString[1];             // 取小数部分
            }

            decString 
+= "00";
            decString  
= decString.Substring (0,2);   // 保留两位小数位
    
            
try
            
{
                
// 以下处理整数部分
                curPoint = intString.Length-1;
                
if (curPoint>=0 && curPoint<15)
                
{
                    k 
= 0;
                    
while(curPoint>=0)
                    
{
                        strBuff1 
= "";
                        strBuff2 
= "";
                        strBuff3 
= "";
                        
if (curPoint>=2)
                        
{
                            n
=int.Parse(intString.Substring(curPoint-2,3));
                            
if (n !=0)
                            
{
                                i1 
= n/100;            // 取佰位数值
                                i2 = (n-i1*100)/10;    // 取拾位数值
                                i3 = n-i1*100-i2*10;   // 取个位数值
                                if (i1 !=0)
                                
{
                                    strBuff1 
= enSmallNumber[i1] + " HUNDRED ";
                                }

                                
if (i2!=0)
                                
{
                                    
if (i2==1)
                                    
{
                                        strBuff2 
= enSmallNumber[i2*10+i3] + " ";
                                    }

                                    
else 
                                    
{
                                        strBuff2 
= enLargeNumber[i2-2+ " ";
                                        
if (i3 !=0)
                                        
{
                                            strBuff3 
= enSmallNumber[i3] + " ";
                                        }

                                    }

                                }

                                
else
                                
{
                                    
if (i3 !=0)
                                    
{
                                        strBuff3 
= enSmallNumber[i3] + " ";
                                    }

                                }

                                engCapital 
= strBuff1 + strBuff2 + strBuff3 + enUnit[k] + " " + engCapital;    
                            }

                        }

                        
else
                        
{
                            n 
= int.Parse(intString.Substring(0,curPoint+1));
                            
if (n !=0)
                            
{
                                i2 
= n/10;      // 取拾位数值
                                i3 = n-i2*10;   // 取个位数值
                                if (i2!=0)
                                
{
                                    
if (i2==1)
                                    
{
                                        strBuff2 
= enSmallNumber[i2*10+i3] + " ";
                                    }

                                    
else 
                                    
{
                                        strBuff2 
= enLargeNumber[i2-2+ " ";
                                        
if (i3 !=0)
                                        
{
                                            strBuff3 
= enSmallNumber[i3] + " ";
                                        }

                                    }

                                }

                                
else
                                
{
                                    
if (i3 !=0)
                                    
{
                                        strBuff3 
= enSmallNumber[i3] + " ";
                                    }

                                }

                                engCapital 
= strBuff2 + strBuff3 + enUnit[k] + " " + engCapital;
                            }

                        }

            
                        
++k;
                        curPoint 
-= 3;
                    }

                    engCapital 
= engCapital.TrimEnd();
                }


    
                
// 以下处理小数部分
                strBuff2 = "";
                strBuff3 
= "";
                n 
= int.Parse(decString);
                
if (n !=0)
                
{
                    i2 
= n/10;      // 取拾位数值
                    i3 = n-i2*10;   // 取个位数值
                    if (i2!=0)
                    
{
                        
if (i2==1)
                        
{
                            strBuff2 
= enSmallNumber[i2*10+i3] + " ";
                        }

                        
else 
                        
{
                            strBuff2 
= enLargeNumber[i2-2+ " ";
                            
if (i3 !=0)
                            
{
                                strBuff3 
= enSmallNumber[i3] + " ";
                            }

                        }

                    }

                    
else
                    
{
                        
if (i3 !=0)
                        
{
                            strBuff3 
= enSmallNumber[i3] + " ";
                        }

                    }


                    
// 将小数字串追加到整数字串后
                    if (engCapital.Length>0)
                    
{
                        engCapital 
= engCapital + " AND CENTS " + strBuff2+strBuff3;   // 有整数部分时
                    }

                    
else
                    
{
                        engCapital 
= "CENTS " + strBuff2 + strBuff3;   // 只有小数部分时
                    }

                }
    

                engCapital 
= engCapital.TrimEnd();
                
return engCapital;
            }

            
catch
            
{
                
return "";   // 含非数字字符时,返回零长字串
            }

        }

    }

}
posted @ 2005-06-11 08:55  泡面 @ 幸福  阅读(575)  评论(0)    收藏  举报