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

        }
    }

阿拉伯数字转换成大写数字_递归调用

阿拉伯数字转换成大写数字_递归调用_02

阿拉伯数字转换成大写数字_阿拉伯数字 大写数字_03

阿拉伯数字转换成大写数字_数字转换_04

阿拉伯数字转换成大写数字_阿拉伯数字 大写数字_05

阿拉伯数字转换成大写数字_数字转换_06