数字大小写转换

 private void button1_Click(object sender, EventArgs e)
        {
            string input = textBox1.Text.Trim();
            if ( Regex.IsMatch(input, "^[1-9]//d{1,11}"))
            {
                txtResult .Text = NumberToChinese2(input);
            }
            else 
            { 
                MessageBox.Show(this,"输入内容必须是1-12位的数字,请检查!","错误"); 
            }
        }
        /// <summary>
        /// 主要转换方法
        ///思路:对输入的数字字符串分每4位一段取出添加单位,再对每段内的数字进行转换并添加位数,最后拼接完成. 
        /// </summary>
        /// <param name="input"> 要转换的数字</param>
        /// <returns>转换成功的汉字字符串</returns>
        public string NumberToChinese2(string input)
        {
            string returnValue = "";//返回值
            string[] ChinaNumbers = { "", "", "", "", "", "", "", "", "", "" };//数字转成中字的字符数组.(汉字数字)
            string[] digitUnits = { "", "", "", "" };//数字位数的数组(数字单位)
            string[] teamUnits = { "", ",万,", ",亿,", ",万亿," };//每四位数字一个单元中间应插入的单位.(组单位)
            int length = input.Length;//获取字符长度
            int finger = 0;//字符位置指针
            int m = length % 4;//取模
            int unitCount = 0;//统计该字符串可分为几段.
            if (m > 0)
            {//如果input的长度不是4的倍数.
                unitCount = length / 4 + 1;
            }
            else
            {//如果input的长度是4的倍数.
                unitCount = length / 4;
            }
            //外层循环,4位一组,给每一组的最后加上组单位:",万亿," ,",亿,",",万,"
            for (int i = unitCount; i > 0; i--)
            {
                int L = 4;//每次要截取的长度,初始为4,但如果input总长度不到4位时,设为input的实际长度
                if (i == unitCount && m != 0)
                    L = m;
                string four = input.Substring(finger, L);//截取到一组数字.
                int l = four.Length;//获得这组数字的实际长度.
                //内层循环在该组中的每一位数上循环
                for (int j = 0; j < l; j++)
                {
                    int n = Convert.ToInt32(four.Substring(j, 1));//逐个提取出每一位数字.
                    if (n == 0)
                    {//处理位数上为零的情况
                        if (j < l - 1 && Convert.ToInt32(four.Substring(j + 1, 1)) > 0 && !returnValue.EndsWith(ChinaNumbers[n]))
                            returnValue += ChinaNumbers[n];
                    }
                    else
                    {
                        if (!(n == 1 && (returnValue.EndsWith(ChinaNumbers[0]) | returnValue.Length == 0) && j == l - 2))
                        {
                            returnValue += ChinaNumbers[n];
                        }
                        returnValue += digitUnits[l - j - 1];
                    }
                }
                finger += 1;//指针向前移
                if (i < unitCount)//如果不是最高的一组,每组最后加个一个组单位.
                {
                    if (Convert.ToInt32(four) != 0)//如果所有4位数字都不为0,则加上组单位"万","亿"等
                        returnValue += teamUnits[i - 1];
                }
                else
                {
                    returnValue += teamUnits[i - 1];//处理最高的一组,最后必须加上单位.
                }
            }

            return returnValue;
        }

 

posted @ 2013-05-20 01:46  Net-Spider  阅读(894)  评论(0)    收藏  举报