将一串数字转化为中文字符串,使用 C# 将数字转换成大写人民币 (例如:用户输入2300,系统就会显示两千三百元 )

来源:互联网 发布:淘宝vip会员设置 编辑:程序博客网 时间:2024/05/01 06:07

 

用户在输入数字的时候,系统自动会将此数字转换成人民币显示,比如用户输入2300,系统就会显示两千三百元

我比较懒,一般会先百度一下什么的,有倒是有不过不太好(个人观点)

http://www.cnblogs.com/dxiao/articles/1216262.html

哈哈我一般对有意思的事情都比较感兴趣……嘻嘻嘻 于是我从2个小时前开始写,终于较未完美的完成了

拉了一个button两个textbox 废话就不多加了 注释的还行o(∩_∩)o...哈哈 这个东西有点意思

 

        #region 转化部分
        #region 输入框事件 限制为只能输入数字
        private void tbNumber_TextChanged(object sender, EventArgs e)
        {
            string temp = tbNumber.Text.Trim();
            if (temp != "")
            {
                if (!IsNumber(temp) || temp.Length > 32 || (temp.Length == 1 && temp == "0"))
                    tbNumber.Text = temp.Substring(0, temp.Length - 1);              
            }
            if (temp.StartsWith("0"))
                tbNumber.Text = temp.Substring(1, temp.Length - 1);
            if (tbNumber.Text != "")
            {
                btnSayRMB.Enabled = true; btnRead.Enabled = true;
            }
            else
            {
                btnSayRMB.Enabled = false; btnRead.Enabled = false;
            }
        }
        #endregion

        #region 判断是否是数字
        /// <summary>
        /// 判断是否是数字
        /// </summary>
        /// <param name="strNumber"></param>
        /// <returns></returns>
        public bool IsNumber(String strNumber)
        {
            Regex objNotNumberPattern = new Regex("[^0-9.-]");
            Regex objTwoDotPattern = new Regex("[0-9]*[.][0-9]*[.][0-9]*");
            Regex objTwoMinusPattern = new Regex("[0-9]*[-][0-9]*[-][0-9]*");
            String strValidRealPattern = "^([-]|[.]|[-.]|[0-9])[0-9]*[.]*[0-9]+$";
            String strValidIntegerPattern = "^([-]|[0-9])[0-9]*$";
            Regex objNumberPattern = new Regex("(" + strValidRealPattern + ")|(" + strValidIntegerPattern + ")");

            return !objNotNumberPattern.IsMatch(strNumber) &&
            !objTwoDotPattern.IsMatch(strNumber) &&
            !objTwoMinusPattern.IsMatch(strNumber) &&
            objNumberPattern.IsMatch(strNumber);
        }
        #endregion

        #region 转化按钮
        //翻译
        private void btnSayRMB_Click(object sender, EventArgs e)
        {
            lbRmb.Text = IntToCHN(tbNumber.Text) + "元";//转化为人民币
        }
        #endregion

        #region 转化函数
        /// <summary>
        /// 转化函数
        /// </summary>
        /// <param name="IntStr">需要转化的字符串</param>
        /// <returns>转化完后的字符串</returns>
        private string IntToCHN(string IntStr)
        {
            StringBuilder retval = new StringBuilder();//用来存放中文形式的数字
            string[] SubNumStr = SubSectionNumStr(IntStr);//用来存放以亿为单位的字符串数组
            for (int i = 0; i < SubNumStr.Length; i++)
            {
                string OneStr = ManageStrZero(SubNumStr[i].ToString());//需要判断有多个“0”的情况
                char[] chars = OneStr.ToCharArray(); //存储字符
                int tempcount = chars.Length;//用来记录位数
                foreach (char c in chars)
                {
                    if (i != SubNumStr.Length - 1 && SubNumStr.Length > 1)
                        retval.Append(NumParseToText(c, tempcount - 1, true));//当整体数值大于亿时需要进位
                    else
                        retval.Append(NumParseToText(c, tempcount - 1, false));
                    if (tempcount > 0)
                        tempcount--;//向后移位
                }
            }
            return NumStrNodeManage(retval.ToString());
        }
        #endregion

        #region 将字符串以亿为单位拆分为字符数组
        /// <summary>
        /// 将字符串以亿为单位拆分为字符数组
        /// </summary>
        /// <param name="NumStr">字符串</param>
        /// <returns>得到用“|”号隔开的字符串数组</returns>
        private string[] SubSectionNumStr(string NumStr)
        {
            StringBuilder temp = new StringBuilder();
            int Howm = NumStr.Length / 9;
            if (NumStr.Length > 9)
            {
                for (int i = 0; i < Howm; i++)
                {
                    temp.Insert(0,"|" + NumStr.Substring(NumStr.Length - 9, 9));
                    NumStr = NumStr.Remove(NumStr.Length - 9, 9);
                }
                if (NumStr!="")
                temp.Insert(0,NumStr);
                return temp.ToString().Split('|');
            }
            else
                return NumStr.Split();
        }
        #endregion

        #region 判断有多个“0”的情况
        /// <summary>
        /// 判断有多个“0”的情况
        /// </summary>
        /// <param name="ZeroStr">处理字符</param>
        /// <returns>多个零处理成“*”号</returns>
        private string ManageStrZero(string ZeroStr)
        {
            return ZeroStr.Replace("00000000", "*******0").Replace("0000000", "******0").Replace("000000", "*****0").Replace("00000", "****0").Replace("0000", "***0").Replace("000", "**0").Replace("00", "*0");
        }
        #endregion

        #region 将字符转化为大写的中文形式
        /// <summary>
        /// 将数字字符转化为大写的中文形式
        /// </summary>
        /// <param name="str">需要转化的字符</param>
        /// <param name="count">位数</param>
        /// <param name="moreBill">是否超过9位</param>
        /// <returns>返回中文形式的数字字符</returns>
        private string NumParseToText(char str, int count,bool moreBill)
        {
            string retval = "";
            switch (str)
            {
                case '0': retval = "零"; break;
                case '1': retval = "壹"; break;
                case '2': retval = "贰"; break;
                case '3': retval = "叁"; break;
                case '4': retval = "肆"; break;
                case '5': retval = "伍"; break;
                case '6': retval = "陆"; break;
                case '7': retval = "柒"; break;
                case '8': retval = "捌"; break;
                case '9': retval = "玖"; break;
                default: break;
            }
            if (moreBill)
            {
                count++;//当整体数值大于亿时需要进位
            }
            if ((str != '0' && str != '*')||count==4||count==8)//当字符为0时不需要加位数但如果过万仍需要:十万 百万 千万 和过亿时需要:十亿 百亿 千亿
            {
                switch (count.ToString())
                {
                    case "1":
                    case "5":
                    case "9":
                        retval += "拾"; break;
                    case "2":
                    case "6":
                    case "10":
                        retval += "佰"; break;
                    case "3":
                    case "7":
                    case "11":
                        retval += "仟"; break;
                    case "4": retval += "万"; break;
                    case "8": retval += "亿"; break;
                    default: break;
                }
            }
            return retval;
        }
        #endregion

        #region 尾数、亿和万节点处理
        private string NumStrNodeManage(string Numstr)
        {
            string TempNumStr = Numstr;
            if (Numstr.EndsWith("零"))//如果以零结尾则需要去除
                TempNumStr = Numstr.Remove(Numstr.Length - 1);
            TempNumStr = TempNumStr.Replace("零零", "亿零").Replace("零万","万零");//数字过亿时会出现亿为转折点因为将多个0处理成一个0时是以亿为一组
            return TempNumStr;
        }
        #endregion

 

 

源码资源:http://download.csdn.net/source/836642

 

http://blog.csdn.net/zwb1101/archive/2008/12/02/3432534.aspx

 

 

原创粉丝点击