RMB數字轉換中文

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


namespace AmountOfConversion
{
    /// <summary>
    /// 金額轉換
    /// </summary>
    public class Program
    {
        static void Main(string[] args)
        {
            string cash = Console.ReadLine();
            Console.WriteLine(new Amount().CmycurD(cash));
            Console.ReadKey();
        }
    }


    public class Amount
    {
        private static String[] ChinaNum = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖", "拾" };
        private static String[] unitI = { "元", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟", "万" };
        private static String[] unitII = { "", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟", "万" };
        private static String[] unitIII = { "角", "分" };


        /// <summary>
        /// 转换人民币大小金额
        /// </summary>
        /// <param name="num">金额</param>
        /// <returns>返回大写形式</returns>
        public string CmycurD(decimal num)
        {
            Boolean hasPoint = false;
            bool isInt = true;
            string strNum;//整个数字字符串
            string strNumInt;//整数部分
            string strNumPoint = "";//小数部分
            string result = "";//返回的字符串


            num = Math.Round(num, 2);//四舍五入取两位
            //各种非正常情况处理
            if (num < 0)
                throw new Exception("不转换欠条");
            else if (num > Convert.ToDecimal(9999999999999.99))
                throw new Exception("很难想象谁会有这么多钱!");
            else if (num == 0)
                return ChinaNum[0];
            //***************************************************************
            strNum = num.ToString();
            //分开整数与小数处理
            if (strNum.Contains("."))
            {
                int pointIndex = strNum.IndexOf(".");
                strNumInt = strNum.Substring(0, pointIndex);
                strNumPoint = strNum.Substring(pointIndex + 1);
                hasPoint = true;
                isInt = false;
            }
            else
            {
                strNumInt = strNum;
                strNumPoint = String.Empty;
                hasPoint = false;
            }
            //整数部分处理
            if (Convert.ToInt32(strNumInt) > 0)
            {
                strNumInt = Reverse(strNumInt);
                for (int i = 0; i < strNumInt.Length; i++)
                {
                    string strChar = strNumInt.Substring(i, 1);
                    if (int.Parse(strChar) != 0)
                        result = ChinaNum[int.Parse(strChar)] + unitI[i] + result;
                    else if (i == 0 || i == 4 || i == 8)
                    {
                        if (strNumInt.Length > 8 && i == 4)
                            continue;
                        result = unitI[i] + result;
                    }
                    else if (int.Parse(strNumInt.Substring(i - 1, 1)) != 0)
                        result = ChinaNum[int.Parse(strChar)] + result;
                }
                if (!hasPoint)
                    return result + "整";
            }
            //小数部分处理
            if (Convert.ToInt32(strNumInt) > 0)
            {
                for (int i = 0; i < strNumPoint.Length; i++)
                {
                    string strChar = strNumPoint.Substring(i, 1);
                    if (int.Parse(strChar) != 0)
                        result += ChinaNum[int.Parse(strChar)] + unitIII[i];
                    else if (i != 1 && isInt)
                        result += ChinaNum[int.Parse(strChar)];
                }
            }
            return result;
        }


        /// <summary>
        /// 一个重载,将字符串先转换成数字在调用CmycurD(decimal num)
        /// </summary>
        /// <param name="num">用户输入的金额,字符串形式未转成decimal</param>
        /// <returns></returns>
        public string CmycurD(string numstr)
        {
            try
            {
                decimal num = Convert.ToDecimal(numstr);
                return CmycurD(num);
            }
            catch (Exception ex)
            {
                return ex.Message;
            }
        }


        /// <summary>
        /// 反转字符串
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public string Reverse(string str)
        {
            string strReturn = "";
            foreach (char c in str)
            {
                strReturn = c + strReturn;
            }
            return strReturn;
        }


    }
}



转载于:https://my.oschina.net/gaowch/blog/122388

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值