C#人民币(钱)数字转为汉字
主要技术有:
CharEnumerator
字符串结倒序
Regex。
using System; using System.Configuration; using System.Data; 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; using System.Text; using System.Text.RegularExpressions; public partial class Default2 : System.Web.UI.Page { private const string Zero = "零", Wan = "万", Billion = "亿", Trillion = "兆", ZeroJia = "(零)+"; protected void Page_Load(object sender, EventArgs e) { string strInt = "20000000.267"; string result = string.Empty; if (strInt.IndexOf('.') > 0) { string[] str = strInt.Split('.'); result = GetValue(str[0], true) + Zero + GetValue(str[1], false); } else { result = GetValue(strInt, true); } Response.Write(result); } string[] Names = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" }; //string[] Names = { "零", "一", "二", "三", "四", "五", "六", "七", "八", "九" }; string[] Meney = { "角", "分", "厘", "", "十", "百", "千", "万", "十万", "百万", "千万", "亿", "十亿", "百亿", "千亿", "兆", "十兆", "百兆", "千兆" }; private string GetValue(string value, bool flag) { StringBuilder sb = new StringBuilder(); int strlen = value.Length + 2; CharEnumerator ce = value.GetEnumerator(); int i = 0; while (ce.MoveNext()) { if (flag) sb.Append(GetName(int.Parse(ce.Current.ToString()), strlen - i, flag)); else sb.Append(GetName(int.Parse(ce.Current.ToString()), i, flag)); i++; } string result = sb.ToString(); if (flag) { //将多个零合为一个零 Regex rx = new Regex(ZeroJia); result = rx.Replace(result, Zero); //result = result.Replace("一十", "十"); //将结果最后的零去掉 if (result.EndsWith(Zero)) result = result.Substring(0, result.Length - 1); //结果倒序 result = reverseStr(result); //仅保留最后一个“万” rx = new Regex(Wan); int mark = result.IndexOf(Wan); if (mark > 0) result = rx.Replace(result, "", 4, mark + 1); //仅保留最后一个亿 rx = new Regex(Billion); mark = result.IndexOf(Billion); if (mark > 0) result = rx.Replace(result, "", 4, mark + 1); //仅保留最后一个兆 rx = new Regex(Trillion); mark = result.IndexOf(Trillion); if (mark > 0) result = rx.Replace(result, "", 4, mark + 1); //将结果恢复正常 result = reverseStr(result); Regex.Replace(Regex.Replace(Regex.Replace(result, "亿零", "亿"), "万零", "万"), "兆零", "兆"); return result + "元"; } else return result; } private string GetName(int ct, int crelen, bool flag) { if (ct == 0) { if (flag) return Zero; else return Names[ct] + Meney[crelen]; } else return Names[ct] + Meney[crelen]; }
private static string reverseStr(string str)
{
// string retval = "";
// char[] arr = str.ToCharArray();
char[] reversed = str.ToCharArray().Reverse().ToArray();
string reverseString = new String(reversed);
//foreach (char cha in str.ToCharArray())
//{
// retval = cha + retval;
//}
return reverseString;
}
}
您可以对变量“string strInt”赋值不同的数字,例如:10000,100000000.23,100020000.45123456789.123
仅准确到”厘“,上限到”千兆“