这是很早以前的了,曾被VC知识库论坛收为精华贴(http://www.vckbase.com/bbs/prime/viewprime.asp?id=576)。也曾被许多论坛转载。今收于此,以作纪念。
- // 货币金额大写转换库 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 string cnNumber = "零壹贰叁肆伍陆柒捌玖";
- private string cnUnit = "分角元拾佰仟万拾佰仟亿拾佰仟兆拾佰仟";
- private string[] enSmallNumber = {"","ONE","TWO","THREE","FOUR","FIVE","SIX","SEVEN","EIGHT","NINE","TEN","ELEVEN","TWELVE","THIRTEEN","FOURTEEN","FIFTEEN","SIXTEEN","SEVENTEEN","EIGHTEEN","NINETEEN"};
- private string[] enLargeNumber = {"TWENTY","THIRTY","FORTY","FIFTY","SIXTY","SEVENTY","EIGHTY","NINETY"};
- private string[] enUnit = {"","THOUSAND","MILLION","BILLION","TRILLION"};
- // 以下是货币金额中文大写转换方法
- public 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;
- n = i+1 >= k ? (int)intString[k]-48:(int)intString[i+1]-48;
- if (j==0)
- {
- if((k-i) % 4==2)
- {
- 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 MoneyString; // 超出转换范围时,返回原值
- }
- }
- catch
- {
- return ""; // 含有非数值字符时,返回零长字串
- }
- }
- // 以下是货币金额英文大写转换方法
- public 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;
- }
- else
- {
- return MoneyString; // 超出转换范围时,返回原值
- }
- }
- catch
- {
- return ""; // 含非数字字符时,返回零长字串
- }
- }
- }
- }