如何把阿拉伯数字转换为中文大写?

    之前在CSDN论坛里,看有人Show了一些把中文大写转换成阿拉伯数字的程序代码,自己也用Java语言实现了程序设计,基本上能够实现十万亿以内的任何数字的转换。之前也帖出自己的实现代码。

    但我个人认为,把大写转换为数字实际上是没有多少意义的。因为很少有把大写转为数字的,大多数都是把数字转换为大写。何况把大写转为数字并不是一件很容易的事情,因为汉语大写有很多种说法,比如说:101,它的汉语说法可以有好多种:

    (一)、百零一

    (二)、一百零一

    (三)、一百又一

    (四)、幺零幺

    因此,要实现起来其实是很难的。而且还要防止用户输入大小写不固定,一会输入“一百零一”,一会又输入“壹佰零壹”,或者是二者的杂合体。形式千变万化,何况这一个数字就可以有这么多种,还有那么多特殊的数字呢?除非用成统一标准的输入。否则是很容易出现问题的。

    但是,数字转换成大写却是很实用的,平时去银行用得比较多,只要涉及金钱的时候,基本上都要求用大写。所以,这种转换看来是符合要求,因此,我用C#代码实现了其功能,并将用户输入用“,”分隔成三个一组的形式,可以实现百万亿级别的数字转换。下面我帖出部分代码,大家指正:

 

其他输入验证我就不帖出来了,只把核心代码帖出来

  1. class Chinese
  2.     {
  3.         public string returnResult(long num)
  4.         {
  5.             string numStr = num.ToString();
  6.             //主要理念是把数字字符串最终分隔为四个一组四个一组的,不足的不管。
  7.             if (numStr.Length > 8 & numStr.Length < 16)
  8.             {
  9.                 //定义一个数组,存储整个字条串分隔后的字符串。然后两次递归调用。
  10.                 //调用完全后,得到总的大写字符串。
  11.                 string[] firstSplit = new string[2];
  12.                 firstSplit[0] = numStr.Substring(0, numStr.Length - 8);
  13.                 firstSplit[1] = numStr.Substring(numStr.Length - 8, 8);
  14.                 string result1 = getString(firstSplit[0]) + "亿";
  15.                 string result2 = getString(firstSplit[1]);
  16.                 return result1 + result2;
  17.             }
  18.             else
  19.             {
  20.                 return getString(numStr);
  21.             }
  22.         }
  23.             //进行一次递归调用,得到两组四位数字的大字字串
  24.         public string getString(string str)
  25.         {
  26.             if (str.Length > 4)
  27.             {
  28.                 string[] secondSplit = new string[2];
  29.                 secondSplit[0] = str.Substring(0, str.Length - 4);
  30.                 secondSplit[1] = str.Substring(str.Length - 4, 4);
  31.                 string result1 = getRe(secondSplit[0]);
  32.                 string result2 = getRe(secondSplit[1]);
  33.                 //确定是否加“万”字
  34.                 if (!secondSplit[0].Equals("0000"))
  35.                 {
  36.                     result1 += "万";
  37.                 }
  38.                 return result1 + result2;
  39.             }
  40.             else
  41.             {
  42.                 return getRe(str);
  43.             }
  44.         }
  45.         int[] value = { 1000, 100, 10 };
  46.         //将四位数以内的字符串返回为正确的大写称呼 比如1234 返回:一千二百三十四
  47.         public string getRe(string doWith)
  48.         {
  49.             char[] number = doWith.ToCharArray();
  50.             int length = number.Length;
  51.             string re = "";
  52.             for (int i = 0; i < length; i++)
  53.             {
  54.                 switch (number[i])
  55.                 {
  56.                     case '0':
  57.                         if (re.EndsWith("零"))
  58.                         {
  59.                             re += "";
  60.                         }
  61.                         else
  62.                         {
  63.                             re += "零";
  64.                         }
  65.                         break;
  66.                     case '1':
  67.                         re += "壹";
  68.                         break;
  69.                     case '2':
  70.                         re += "贰";
  71.                         break;
  72.                     case '3':
  73.                         re += "叁";
  74.                         break;
  75.                     case '4':
  76.                         re += "肆";
  77.                         break;
  78.                     case '5':
  79.                         re += "伍";
  80.                         break;
  81.                     case '6':
  82.                         re += "陆";
  83.                         break;
  84.                     case '7':
  85.                         re += "柒";
  86.                         break;
  87.                     case '8':
  88.                         re += "捌";
  89.                         break;
  90.                     case '9':
  91.                         re += "玖";
  92.                         break;
  93.                 }
  94.                 int index = (int)Math.Pow(10, length - i - 1);
  95.                 if (number[i].ToString() == "0")
  96.                 {
  97.                     index = -1;
  98.                 }
  99.                 switch (index)
  100.                 {
  101.                     case 1000:
  102.                         re += "仟";
  103.                         break;
  104.                     case 100:
  105.                         re += "佰";
  106.                         break;
  107.                     case 10:
  108.                         re += "拾";
  109.                         break;
  110.                 }
  111.             }
  112.             if (re.EndsWith("零"))
  113.             {
  114.                 re = re.Substring(0, re.Length - 1);
  115.             }
  116.             return re;
  117.         }
  118.     }

 

CSDN下载地址:http://d.download.csdn.net/down/842756/yeah86

发布了11 篇原创文章 · 获赞 1 · 访问量 6万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章