C#人民币大小写金额转换

using System;

using System.Collections.Generic;

using System.Text;

 

namespace RMBCapitalization

{

    /// <summary>

    /// 人民币大小写金额转换

    /// </summary>

    class RMBCapitalization

    {

        private const string DXSZ = "零壹贰叁肆伍陆柒捌玖";

        private const string DXDW = "毫厘分角元拾佰仟萬拾佰仟亿拾佰仟萬兆拾佰仟萬亿";

 

        /// <summary>

        /// 转换整数为大写金额

        /// </summary>

        /// <param name="capValue">整数值</param>

        /// <returns>返回大写金额</returns>

        private string ConvertIntToUppercaseAmount(string capValue)

        {

            string currCap = "";

            string capResult = "";

            int prevChar = -1;

            int currChar = 0;

            int posIndex = 4;

 

            if (Convert.ToDouble(capValue) == 0) return "";

            for (int i = capValue.Length - 1; i >= 0; i--)

            {

                currChar = Convert.ToInt16(capValue.Substring(i, 1));

                if (posIndex > 22)

                {

                    break;

                }

                else if (currChar != 0)

                {

                    currCap = DXSZ.Substring(currChar, 1) + DXDW.Substring(posIndex, 1);

                }

                else

                {

                    switch (posIndex)

                    {

                        case 4: currCap = ""; break;

                        case 8: currCap = ""; break;

                        case 12: currCap = "亿"; break;

                        case 17: currCap = ""; break;

                        default: break;

                    }

                    if (prevChar != 0 )

                    {

                        if (currCap != "")

                        {

                            if (currCap != "") currCap += "";

                        }

                        else

                        {

                            currCap = "";

                        }

                    }

                }

                capResult = currCap + capResult;

                prevChar = currChar;

                posIndex += 1;

                currCap = "";

            }

            return capResult;

        }

 

        /// <summary>

        /// 转换小数为大写金额

        /// </summary>

        /// <param name="capValue">小数值</param>

        /// <param name="addZero">是否增加零位</param>

        /// <returns>返回大写金额</returns>

        private string ConvertDecToUppercaseAmount(string capValue, bool addZero)

        {

            string currCap = "";

            string capResult = "";

            int prevChar = addZero ? -1 : 0;

            int currChar = 0;

            int posIndex = 3;

 

            if (Convert.ToInt16(capValue) == 0) return "";

            for (int i = 0; i < capValue.Length; i++)

            {

                currChar = Convert.ToInt16(capValue.Substring(i, 1));

                if (currChar != 0)

                {

                    currCap = DXSZ.Substring(currChar, 1) + DXDW.Substring(posIndex, 1);

                }

                else

                {

                    if (Convert.ToInt16(capValue.Substring(i)) == 0)

                    {

                        break;

                    }

                    else if (prevChar != 0)

                    {

                        currCap = "";

                    }

                }

                capResult += currCap ;

                prevChar = currChar;

                posIndex -= 1;

                currCap = "";

            }

            return capResult;

        }

 

        /// <summary>

        /// 将人民币大写转换成小写

        /// </summary>

        /// <param name="capValue">大写金额值</param>

        /// <returns>返回人民币小写金额</returns>

        private string RMBLowercaseAmount(string capValue)

        {

            string capResult = "";

            string currCap = "";

 

            for (int i = 0; i < capValue.Length; i++)

            {

                currCap = capValue.Substring(i, 1);

                switch (currCap)

                {

                    case "":capResult += "";break;

                    case "":capResult += "";break;

                    case "":capResult += "";break;

                    case "":capResult += "";break;

                    case "":capResult += "";break;

                    case "":capResult += "";break;

                    case "":capResult += "";break;

                    case "":capResult += "";break;

                    case "":capResult += "";break;

                    case "":capResult += "";break;

                    case "":capResult += "";break;

                    case "":capResult += "";break;

                    case "":capResult += "";break;

                    case "":capResult += "";break;

                    default: capResult += currCap; break;

                }

            }

            return capResult;

        }

 

        /// <summary>

        /// 人民币大写金额

        /// </summary>

        /// <param name="value">人民币数字金额值</param>

        /// <param name="isLowercase">是否返回人民币小写金额</param>

        /// <returns>返回人民币大写/小写金额</returns>

        public string RMBAmount(double value, bool isLowercase)

        {

            string capResult ="";

            string capValue =  String.Format("{0:f4}",value);

            int dotPos = capValue.IndexOf(".");

            bool addInt = (dotPos == 0);

            bool addMinus = (capValue.Substring(0, 1) == "-");

            int beginPos = addMinus ? 1 : 0;

            string capInt = capValue.Substring(beginPos, dotPos);

            string capDec = capValue.Substring(dotPos + 1);

 

            if (dotPos > 0)

            {

                capResult = ConvertIntToUppercaseAmount(capInt) + ConvertDecToUppercaseAmount(capDec, Convert.ToDouble(capInt) != 0 ? true : false);

            }

            else

            {

                capResult = ConvertIntToUppercaseAmount(capDec);

            }

            if (addMinus) capResult = "" + capResult;

            if (addInt) capResult += "";

            return isLowercase ? RMBLowercaseAmount(capResult) : capResult;

        }

 

        static void Main(string[] args)

        {

            double cap = 3201001.1002;

            RMBCapitalization rmb = new RMBCapitalization();

            System.Console.WriteLine(rmb.RMBAmount(cap, false) + "/n" + rmb.RMBAmount(cap, true));

        }

    }

}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值