货币金额大写转换库

// 货币金额大写转换库 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
{
publicclass Money2String
{

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

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


// 以下是货币金额中文大写转换方法
publicstatic 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) : 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('');

if (rmbCapital.EndsWith(""))
{
rmbCapital
+="";
}
return rmbCapital;
}
else
{
return""; // 超出转换范围时,返回零长字串
}
}
catch
{
return""; // 含有非数值字符时,返回零长字串
}
}


// 以下是货币金额英文大写转换方法
publicstatic 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""; // 含非数字字符时,返回零长字串
}
}
}
}
原文地址:https://www.cnblogs.com/lfzm/p/2055945.html