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

如题所述

之前在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; } }
温馨提示:答案为网友推荐,仅供参考
相似回答