using System; namespace GoldPrinter { public class ChineseNum { public static string GetChineseNum(string p_num) { ChineseNum chineseNum = new ChineseNum(); return chineseNum.NumToChn(p_num); } public static string GetUpperMoney(double p_Money) { ChineseNum chineseNum = new ChineseNum(); return chineseNum.GetMoneyChinese(p_Money); } private char CharToNum(char x) { string text = "零一二三四五六七八九"; string text2 = "0123456789"; return text[text2.IndexOf(x)]; } private string WanStrToInt(string x) { string[] array = new string[] { "", "十", "百", "千" }; string text = ""; int i; for (i = x.Length - 1; i >= 0; i--) { if (x[i] == '0') { text = this.CharToNum(x[i]) + text; } else { text = this.CharToNum(x[i]) + array[x.Length - 1 - i] + text; } } while ((i = text.IndexOf("零零")) != -1) { text = text.Remove(i, 1); } if (text[text.Length - 1] == '零' && text.Length > 1) { text = text.Remove(text.Length - 1, 1); } if (text.Length >= 2 && text.Substring(0, 2) == "一十") { text = text.Remove(0, 1); } return text; } private string StrToInt(string x) { int length = x.Length; string text; if (length <= 4) { text = this.WanStrToInt(x); } else if (length <= 8) { text = this.WanStrToInt(x.Substring(0, length - 4)) + "万"; string text2 = this.WanStrToInt(x.Substring(length - 4, 4)); if (text2.IndexOf("千") == -1 && text2 != "") { text = text + "零" + text2; } else { text += text2; } } else { text = this.WanStrToInt(x.Substring(0, length - 8)) + "亿"; string text2 = this.WanStrToInt(x.Substring(length - 8, 4)); if (text2.IndexOf("千") == -1 && text2 != "") { text = text + "零" + text2; } else { text += text2; } text += "万"; text2 = this.WanStrToInt(x.Substring(length - 4, 4)); if (text2.IndexOf("千") == -1 && text2 != "") { text = text + "零" + text2; } else { text += text2; } } int num; if ((num = text.IndexOf("零万")) != -1) { text = text.Remove(num + 1, 1); } while ((num = text.IndexOf("零零")) != -1) { text = text.Remove(num, 1); } if (text[text.Length - 1] == '零' && text.Length > 1) { text = text.Remove(text.Length - 1, 1); } return text; } private string StrToDouble(string x) { string text = ""; for (int i = 0; i < x.Length; i++) { text += this.CharToNum(x[i]); } return text; } private string NumToChn(string x) { string result; if (x.Length == 0) { result = ""; } else { string text = ""; if (x[0] == '-') { text = "负"; x = x.Remove(0, 1); } if (x[0].ToString() == ".") { x = "0" + x; } if (x[x.Length - 1].ToString() == ".") { x = x.Remove(x.Length - 1, 1); } if (x.IndexOf(".") > -1) { text = text + this.StrToInt(x.Substring(0, x.IndexOf("."))) + "点" + this.StrToDouble(x.Substring(x.IndexOf(".") + 1)); } else { text += this.StrToInt(x); } result = text; } return result; } private string GetMoneyChinese(double Money) { string result; if (Money == 0.0) { result = ""; } else { string text = Money.ToString("#0.00"); int num = text.IndexOf("."); if (num > 0) { text = text.Replace(".", ""); } if (text.Substring(0, 1) == "0") { text = text.Remove(0, 1); } text = this.NumstrToChinese(text); if (text.Length == 0) { result = ""; } else { if (Money < 0.0) { text = "负" + text; } text = text.Replace("0", "零"); text = text.Replace("1", "壹"); text = text.Replace("2", "贰"); text = text.Replace("3", "叁"); text = text.Replace("4", "肆"); text = text.Replace("5", "伍"); text = text.Replace("6", "陆"); text = text.Replace("7", "柒"); text = text.Replace("8", "捌"); text = text.Replace("9", "玖"); text = text.Replace("M", "亿"); text = text.Replace("W", "万"); text = text.Replace("S", "仟"); text = text.Replace("H", "佰"); text = text.Replace("T", "拾"); text = text.Replace("Y", "圆"); text = text.Replace("J", "角"); text = text.Replace("F", "分"); if (text.Substring(text.Length - 1, 1) != "分") { text += "整"; } result = text; } } return result; } private string NumstrToChinese(string numstr) { string[] array = new string[4]; string text = ""; bool flag = false; array[0] = ""; array[1] = "T"; array[2] = "H"; array[3] = "S"; for (int i = 1; i <= numstr.Length; i++) { int num = numstr.Length - i; string text2 = numstr.Substring(i - 1, 1); if (text2 != "0" && num > 1) { text = text + text2 + array[(num - 2) % 4]; } if (text2 == "0" && !flag) { text += "0"; flag = true; } if (num == 14) { if (text.Substring(text.Length - 1) == "0") { text = text.Substring(0, text.Length - 1) + "W0"; } else { text += "W"; } } if (num == 2) { if (text.Substring(text.Length - 1, 1) == "0") { text = text.Substring(0, text.Length - 1) + "Y0"; } else { text += "Y"; } } if (num == 6) { if (text.Length > 2) { if (text.Substring(text.Length - 2) != "M0") { if (text.Substring(text.Length - 1) == "0") { text = text.Substring(0, text.Length - 1) + "W0"; } else { text += "W"; } } } else if (text.Substring(text.Length - 1) == "0") { text = text.Substring(0, text.Length - 1) + "W0"; } else { text += "W"; } } if (num == 10) { if (text.Substring(text.Length - 1) == "0") { text = text.Substring(0, text.Length - 1) + "M0"; } else { text += "M"; } } if (num == 0 && text2 != "0") { text = text + text2 + "F"; } if (num == 1 && text2 != "0") { text = text + text2 + "J"; } if (text2 != "0") { flag = false; } } if (text.Substring(0, 1) == "1" && text.Substring(1, 1) == array[1]) { text = text.Substring(1); } if (text.Substring(text.Length - 1, 1) == "0") { text = text.Substring(0, text.Length - 1); } if (text.Substring(0, 1) == "0") { text = text.Substring(1); } if (text.Substring(text.Length - 1, 1) == "M" || text.Substring(text.Length - 1, 1) == "W" || text.Substring(text.Length - 1, 1) == "S" || text.Substring(text.Length - 1, 1) == "H" || text.Substring(text.Length - 1, 1) == "T") { text += "Y"; } return text; } } }