七星揽月

Efforts To Make The Best Of Their……
一口吃不出一个胖子,但胖子却是一口一口吃出来的,只要能每天坚持下来,我相信,一定会有收获的
每天进步一点点
  博客园  :: 首页  :: 新随笔  :: 联系 :: 管理

将阿拉伯数字表示的金额转换为大写金额字符串

Posted on 2011-04-11 23:05  期星揽月  阅读(575)  评论(0编辑  收藏  举报

      N久以前去面试的时候,一家做医疗的企业出了一道面试题目是这样的:将阿拉伯数字金额转换为大写金额字符串。但是年轻气盛,一口就答应下来说这还不简单,半个小时给你搞定。于是开始了长达“半个小时”的开发,结果可想而知。

     回来后心里久久不能平静,一来是自己太草率了,二来是自己太自信了,从而使自己难堪,第三就是自己的技术的却是不敢恭维,唉……可叹啦

     后来静下心来,觉得自己有必要把这道题重新做一遍,不管怎样,也要用心去做,就当是一次学习的机会吧。但苦于没有开发环境(只身一人,初来乍到),所以就一直将这件事谨记在心,如今万事具备,东风不缺,乘着这夜深人静时,开始了属于我自己的工作。呵呵,见笑了见笑了。

      对于转换过程,我将全部用代码展示出来,相信参考者一看便明白,当然,我也会上传完整程序,以便见者运行调试。

 
View Code
1 private void btnOK_Click(object sender, EventArgs e)
2 {
3 int result = IsDecimal(this.txtNumber.Text.ToString());
4
5 if (result == 1)
6 {
7 MessageBox.Show(ReturnString(NumToString(this.txtNumber.Text.ToString())));
8 }
9 if (result == 2)
10 {
11 MessageBox.Show("输入的数字太大");
12 }
13 if (result == 3)
14 {
15 MessageBox.Show("您输入的数字不合法");
16 }
17 if (result == 4)
18 {
19 MessageBox.Show("输入了负数");
20 }
21
22 }
判断输入的字符串是不是正数字
1 /// <summary>
2 /// 判断输入的字符串是不是正数字
3 /// </summary>
4 /// <param name="str"></param>
5 /// <returns>正确:1 ; 太大:2 ; 不合法:3 ; 负数:4</returns>
6 private int IsDecimal(string str)
7 {
8
9 try
10 {
11 if (str.IndexOf('.') == 0)
12 {
13 return 3;
14 }
15 else if (Convert.ToDecimal(str) >= 0 && Double.Parse(str) <= 999999999999.99)
16 {
17 return 1;
18 }
19 else if (Double.Parse(str) > 999999999999.99)
20 {
21 return 2;
22 }
23 else
24 {
25 return 4;
26 }
27 }
28 catch (Exception)
29 {
30 return 3;
31 }
32 }
对数字进行转换为字符串
1 /// <summary>
2 /// 对数字进行转换为字符串
3 /// </summary>
4 /// <param name="str"></param>
5 /// <returns></returns>
6 private string NumToString(string str)
7 {
8 string[] st = str.Split('.');//按小数点将字符串分割成两部分(整数部分和小数部分)
9 string returnStr = null;
10
11 if (st.Length == 1)//只有整数部分
12 {
13 returnStr= ConvertString2(st[0].ToString());
14 }
15 else//有小数部分
16 {
17 returnStr = ConvertString2(st[0].ToString());
18 returnStr += ConvertXiaoShu(st[1].ToString());
19 }
20 return returnStr;
21 }
对四位数字进行转换
1 /// <summary>
2 /// 对四位数字进行转换
3 /// </summary>
4 /// <param name="str"></param>
5 /// <returns></returns>
6 private string ConvertString1(string zhengshu)
7 {
8 int strLenght = zhengshu.Length;
9 string returnStr = string.Empty;
10
11 if (strLenght == 1)
12 {
13 returnStr = ConvertString(zhengshu[0].ToString());
14 }
15 if (strLenght == 2)
16 {
17 returnStr = ConvertString(zhengshu[0].ToString()) + "" + ConvertString(zhengshu[1].ToString());
18 }
19 if (strLenght == 3)
20 {
21 returnStr = ConvertString(zhengshu[0].ToString()) + "" + ConvertString(zhengshu[1].ToString()) + "" + ConvertString(zhengshu[2].ToString());
22 }
23 if (strLenght == 4)
24 {
25 returnStr = ConvertString(zhengshu[0].ToString()) + "" + ConvertString(zhengshu[1].ToString()) + "" + ConvertString(zhengshu[2].ToString()) + "" + ConvertString(zhengshu[3].ToString());
26 }
27
28 returnStr = returnStr.Replace("零仟", "");
29 returnStr = returnStr.Replace("零佰", "");
30 returnStr = returnStr.Replace("零拾", "");
31
32 return returnStr;
33 }
对转换的字符加上单位
1 /// <summary>
2 /// 对转换的字符加上单位
3 /// </summary>
4 /// <param name="str"></param>
5 /// <returns></returns>
6 private string ConvertString2(string str)
7 {
8 string returnStr = string.Empty;
9
10 if (str.Length <= 4)
11 {
12 returnStr = ConvertString1(str) + "";
13 }
14 if (str.Length > 4 && str.Length <= 8)
15 {
16 returnStr = ConvertString1(str.Substring(0, str.Length - 4)) + "" + ConvertString1(str.Substring(str.Length - 4, 4)) + "";
17 }
18 if (str.Length > 8 && str.Length <= 12)
19 {
20 returnStr = ConvertString1(str.Substring(0, str.Length - 8)) + "" + ConvertString1(str.Substring(str.Length - 8, 4)) + "" + ConvertString1(str.Substring(str.Length - 4, 4)) + "";
21 }
22
23 return returnStr;
24 }
小数部分转换为字符串
1 /// <summary>
2 /// 小数部分转换为字符串
3 /// </summary>
4 /// <param name="xiaoshu"></param>
5 /// <returns></returns>
6 private string ConvertXiaoShu(string xiaoshu)
7 {
8 int strLength = xiaoshu.Length; //小数部分的长度
9 string returnStr = null;
10
11 if (strLength == 1)
12 {
13 returnStr = ConvertString(xiaoshu) + "";
14 }
15 if (strLength == 2)
16 {
17 returnStr = ConvertString(xiaoshu[0].ToString()) + "" + ConvertString(xiaoshu[1].ToString()) + "";
18
19 }
20 if (strLength >= 3)
21 {
22 returnStr = ConvertString(xiaoshu[0].ToString()) + "" + ConvertString(xiaoshu[1].ToString()) + "";
23
24 for (int i = 2; i < strLength; i++)
25 {
26 returnStr += ConvertString(xiaoshu[i].ToString());
27 }
28 }
29
30 returnStr = returnStr.Replace("零角", "");
31 returnStr = returnStr.Replace("零分", "");
32
33 return returnStr;
34 }
将一个数字转换为中文大写
1 /// <summary>
2 /// 将一个数字转换为中文大写
3 /// </summary>
4 /// <param name="str"></param>
5 /// <returns></returns>
6 private string ConvertString(string str)
7 {
8 switch (str)
9 {
10 case "0": str = ""; break;
11 case "1": str = ""; break;
12 case "2": str = ""; break;
13 case "3": str = ""; break;
14 case "4": str = ""; break;
15 case "5": str = ""; break;
16 case "6": str = ""; break;
17 case "7": str = ""; break;
18 case "8": str = ""; break;
19 case "9": str = ""; break;
20 }
21
22 return str;
23
24 }
消除字符串中的“零”
1 /// <summary>
2 /// 消除字符串中的“零”
3 /// </summary>
4 /// <param name="str"></param>
5 /// <returns></returns>
6 private string ReturnString(string str)
7 {
8 str = str.Replace("零零", "");
9 str = str.Replace("零零", "");
10 str = str.Replace("零億", "");
11 str = str.Replace("零萬", "");
12 str = str.Replace("零圆", "");
13 str = str.Replace("零零", "");
14 str = str.Replace("零零", "");
15
16 if(str.IndexOf("") == 0)
17 {
18 str = str.Replace("", "");
19 }
20 if (str.IndexOf("") == 0)
21 {
22 str = str.Replace("", "");
23 }
24 return str;
25 }