您的位置:首页 > 编程语言 > ASP

ASP.NET C# 货币转换函数 中文大写金额 英文金额

2011-10-07 11:37 1591 查看
using System;

using System.Data;

using System.Configuration;

using System.Linq;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.HtmlControls;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Xml.Linq;

// 静态中文转换方法 String GetCnString(String MoneyString)

// 最大转化金额 9999999999999999.99 (16位整数位,2位小数位)

// 方法返回值 转换成功则返回非零长字串,否则返回零长字串

// 静态英文转换方法 String GetEnString(String MoneyString)

// 最大转化金额 999999999999999.99 (15位整数位,2位小数位)

// 方法返回值 转换成功则返回非零长字串,否则返回零长字串

using System;

public class Money

{

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" };

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 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 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 ";

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; // 有整数部分时

engCapital = engCapital + " And Cents " + strBuff2 + strBuff3; // 有整数部分时

}

else

{

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

engCapital = "Cents " + strBuff2 + strBuff3; // 只有小数部分时

}

}

engCapital = engCapital.TrimEnd();

return engCapital;

}

catch

{

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

}

}

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: