看有人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;
}
}