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


          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 }
  • 相关阅读:
    高亮表格行或列
    点击表格获取表格行或列索引
    文本框仅可接收decimal
    实现表格自动计算
    实现一个超简单的开关
    Nginx反向代理中proxy_set_header参数说明
    两个目录中,删除其中一个目录中同名文件的做法
    监控某个目录是否被更改
    centos下升级git版本的操作记录
    linux下core file size设置笔记
  • 原文地址:https://www.cnblogs.com/qixing_gan/p/2013065.html
Copyright © 2020-2023  润新知