340 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			340 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| 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;
 | |
| 		}
 | |
| 	}
 | |
| }
 |