zoukankan      html  css  js  c++  java
  • 人民币小写转大写金额(可达千百万亿)

    在很多企业级的软件开发中,很多时候会涉及到人民币的小写转大写。原来有个VB6的程序,现转为.Net,实现相当简单,同时支持达千百万亿的金额转换。现贴出代码以供参考:(本思路有别于网上很多的代码,通读易懂,可说是最佳实现)

            /// <summary>
            /// 小写金额转换成大写金额
            /// </summary>
            /// <param name="number"></param>
            /// <param name="turnType"></param>
            /// <returns></returns>
            public static string ConvertToCHNMoney(decimal number, CHNMoneyType turnType)
            {

                string s_CHNNumString = "零壹贰叁肆伍陆柒捌玖";
                //可正确最大金额可以到千万亿元正,有分位为百万亿元或十万亿
                string result = string.Empty;
                if (number > 0)
                {
                    string s_DXDw = "分角元拾佰仟万拾佰仟亿拾佰仟万拾佰仟";
                    ulong je = (ulong)(number * 100);
                    ulong temNum = je;
                    int index = 0;
                    for (int n = 0; temNum != 0; n++)
                    {
                        index = (int)(temNum - temNum / 10 * 10); //取出最后一个数
                        temNum = temNum / 10;
                        result = s_CHNNumString.Substring(index, 1) + s_DXDw.Substring(n, 1) + result;    //发票格式
                    }
                    if (turnType == CHNMoneyType.CheckType)
                    {
                        string temResult = string.Empty;
                        string temMoney = string.Empty;
                        string unit = string.Empty;
                        string digitChar = string.Empty;
                        string str1 = "零元万整";
                        string str2 = "零元万亿整";
                        for (int n = result.Length - 2; n >= 0; n = n - 2)  //从后面每二个取字符串。
                        {
                            temMoney = result.Substring(n, 2);
                            unit = temMoney.Substring(1, 1);
                            digitChar = temMoney.Substring(0, 1);
                            switch (unit)
                            {
                                case "分":
                                    if (digitChar == "零")
                                        temMoney = "整";
                                    break;
                                case "元":
                                case "万":
                                case "亿":
                                    string temDigitChar = temResult.Substring(0, 1);
                                    if (digitChar == "零")
                                    {
                                        if (str1.IndexOf(temDigitChar) == -1)
                                            temMoney = unit + "零";
                                        else
                                        {
                                            if (temDigitChar == "万")
                                                temResult = temResult.Substring(1);
                                            temMoney = unit;
                                        }
                                    }
                                    else if (temDigitChar == "万")
                                        temResult = temResult.Substring(1);
                                    break;
                                default:
                                    if (digitChar == "零")
                                    {
                                        if (str2.IndexOf(temResult.Substring(0, 1)) != -1)
                                            temMoney = "";
                                        else
                                            temMoney = "零";
                                    }
                                    break;
                            }
                            temResult = temMoney + temResult;
                        }
                        result = temResult;
                    }
                }
                return result;
            }
        }

        /// <summary>
        /// 大字金额的格式。
        /// </summary>
        public enum CHNMoneyType
        {
            /// <summary>
            /// 支票格式
            /// </summary>
            CheckType,
            /// <summary>
            /// 发票格式
            /// </summary>
            InvoiceType
        }

  • 相关阅读:
    idea配置SOLServer错误解决记录
    精确的double加减乘除运算工具类
    Java类型转换工具类(十六进制—bytes互转、十进制—十六进制互转,String—Double互转)
    rest的Web服务端获取http请求头字段
    前端开发规范:1-通用规范
    一些webpack常见编译报错的解决方案
    常用的数组对象操作方法
    理解ES6的新数据类型:Symbol
    canvas在vue中的应用
    vue-cli3+typescript+路由懒加载报错问题
  • 原文地址:https://www.cnblogs.com/Yjianyong/p/1985558.html
Copyright © 2011-2022 走看看