之前在CSDN论坛里,看有人Show了一些把中文大写转换成阿拉伯数字的程序代码,自己也用Java语言实现了程序设计,基本上能够实现十万亿以内的任何数字的转换。之前也帖出自己的实现代码。
但我个人认为,把大写转换为数字实际上是没有多少意义的。因为很少有把大写转为数字的,大多数都是把数字转换为大写。何况把大写转为数字并不是一件很容易的事情,因为汉语大写有很多种说法,比如说:101,它的汉语说法可以有好多种:
(一)、百零一
(二)、一百零一
(三)、一百又一
(四)、幺零幺
因此,要实现起来其实是很难的。而且还要防止用户输入大小写不固定,一会输入“一百零一”,一会又输入“壹佰零壹”,或者是二者的杂合体。形式千变万化,何况这一个数字就可以有这么多种,还有那么多特殊的数字呢?除非用成统一标准的输入。否则是很容易出现问题的。
但是,数字转换成大写却是很实用的,平时去银行用得比较多,只要涉及金钱的时候,基本上都要求用大写。所以,这种转换看来是符合要求,因此,我用C#代码实现了其功能,并将用户输入用“,”分隔成三个一组的形式,可以实现百万亿级别的数字转换。下面我帖出部分代码,大家指正:
其他输入验证我就不帖出来了,只把核心代码帖出来
- class Chinese
- {
- public string returnResult(long num)
- {
- string numStr = num.ToString();
- //主要理念是把数字字符串最终分隔为四个一组四个一组的,不足的不管。
- if (numStr.Length > 8 & numStr.Length < 16)
- {
- //定义一个数组,存储整个字条串分隔后的字符串。然后两次递归调用。
- //调用完全后,得到总的大写字符串。
- string[] firstSplit = new string[2];
- firstSplit[0] = numStr.Substring(0, numStr.Length - 8);
- firstSplit[1] = numStr.Substring(numStr.Length - 8, 8);
- string result1 = getString(firstSplit[0]) + "亿";
- string result2 = getString(firstSplit[1]);
- return result1 + result2;
- }
- else
- {
- return getString(numStr);
- }
- }
- //进行一次递归调用,得到两组四位数字的大字字串
- public string getString(string str)
- {
- if (str.Length > 4)
- {
- string[] secondSplit = new string[2];
- secondSplit[0] = str.Substring(0, str.Length - 4);
- secondSplit[1] = str.Substring(str.Length - 4, 4);
- string result1 = getRe(secondSplit[0]);
- string result2 = getRe(secondSplit[1]);
- //确定是否加“万”字
- if (!secondSplit[0].Equals("0000"))
- {
- result1 += "万";
- }
- return result1 + result2;
- }
- else
- {
- return getRe(str);
- }
- }
- int[] value = { 1000, 100, 10 };
- //将四位数以内的字符串返回为正确的大写称呼 比如1234 返回:一千二百三十四
- public string getRe(string doWith)
- {
- char[] number = doWith.ToCharArray();
- int length = number.Length;
- string re = "";
- for (int i = 0; i < length; i++)
- {
- switch (number[i])
- {
- case '0':
- if (re.EndsWith("零"))
- {
- re += "";
- }
- else
- {
- re += "零";
- }
- break;
- case '1':
- re += "壹";
- break;
- case '2':
- re += "贰";
- break;
- case '3':
- re += "叁";
- break;
- case '4':
- re += "肆";
- break;
- case '5':
- re += "伍";
- break;
- case '6':
- re += "陆";
- break;
- case '7':
- re += "柒";
- break;
- case '8':
- re += "捌";
- break;
- case '9':
- re += "玖";
- break;
- }
- int index = (int)Math.Pow(10, length - i - 1);
- if (number[i].ToString() == "0")
- {
- index = -1;
- }
- switch (index)
- {
- case 1000:
- re += "仟";
- break;
- case 100:
- re += "佰";
- break;
- case 10:
- re += "拾";
- break;
- }
- }
- if (re.EndsWith("零"))
- {
- re = re.Substring(0, re.Length - 1);
- }
- return re;
- }
- }