zoukankan      html  css  js  c++  java
  • 将阿拉伯数字表示的金额转换为大写金额字符串

          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 }
  • 相关阅读:
    Shared Memory in Windows NT
    Layered Memory Management in Win32
    软件项目管理的75条建议
    Load pdbs when you need it
    Stray pointer 野指针
    About the Rebase and Bind operation in the production of software
    About "Serious Error: No RTTI Data"
    Realizing 4 GB of Address Space[MSDN]
    [bbk4397] 第1集 第一章 AMS介绍
    [bbk3204] 第67集 Chapter 17Monitoring and Detecting Lock Contention(00)
  • 原文地址:https://www.cnblogs.com/qixing_gan/p/2013065.html
Copyright © 2011-2022 走看看