1 public class MyExamFormat : IFormatProvider, ICustomFormatter 2 { 3 public string NumberToChinese(int num) 4 { 5 string numStr = "0123456789"; 6 string chineseStr = "零一二三四五六七八九"; 7 if (num >= 0 && num <= 9) { return chineseStr[numStr.IndexOf(num.ToString()[0])].ToString(); } 8 else if (num >= 10 && num <= 19) { if (num == 10) { return "十"; } return "十" + chineseStr[numStr.IndexOf(num.ToString()[1])].ToString(); } 9 else if (num >= 20 && num <= 99) 10 { 11 if (num % 10 == 0) { return chineseStr[numStr.IndexOf(num.ToString()[0])].ToString() + "十"; } 12 else return chineseStr[numStr.IndexOf(num.ToString()[0])].ToString() + "十" + chineseStr[numStr.IndexOf(num.ToString()[1])].ToString(); 13 } 14 else if (num >= 100 && num <= 999) 15 { 16 if (num % 100 == 0) { return chineseStr[numStr.IndexOf(num.ToString()[0])].ToString() + "百"; } 17 else return chineseStr[numStr.IndexOf(num.ToString()[0])].ToString() + "百" + 18 ((int.Parse(num.ToString().Substring(1).ToString()).ToString().Length != (num.ToString().Length - 1)) ? 19 "零" + NumberToChinese(int.Parse(num.ToString().Substring(1))) 20 : NumberToChinese(int.Parse(num.ToString().Substring(1)))); 21 } 22 else if (num >= 1000 && num <= 9999) 23 { 24 if (num % 1000 == 0) { return chineseStr[numStr.IndexOf(num.ToString()[0])].ToString() + "千"; } 25 else return 26 chineseStr[numStr.IndexOf(num.ToString()[0])].ToString() + "千" + 27 ((int.Parse(num.ToString().Substring(1).ToString()).ToString().Length != (num.ToString().Length - 1)) ? 28 "零" + NumberToChinese(int.Parse(num.ToString().Substring(1))) 29 : NumberToChinese(int.Parse(num.ToString().Substring(1)))); 30 } 31 return num.ToString(); 32 } 33 34 public object GetFormat(Type formatType) 35 { 36 if (formatType == typeof(ICustomFormatter)) 37 { 38 return this; 39 } 40 else return null; 41 } 42 43 public string Format(string format, object arg, IFormatProvider formatProvider) 44 { 45 return "第" + NumberToChinese(int.Parse(arg + "")) + "题"; 46 } 47 }