• C#中将数字金额转成英文大写金额的函数


    <span style="white-space:pre">	</span>/// <summary>
            /// 数字转金额大写
            /// 调用示例:String desc = CommonUtils.convertEnDes(new Decimal("100.55"), "say", "RMB", "only"));
            /// 返回 desc为"say RMB one hundred  dolt five five only"
            /// </summary>
            /// <returns></returns>
            public static String convertEnDes(Object obj, String prefix, String currencyISO, String suffix)
            {
                if (obj == null)
                {
                    return "";
                }
                Decimal val = Convert.ToDecimal(obj);
                StringBuilder sb = new StringBuilder();
                sb.Append(prefix).Append(" ");
                String[] amtEnDesc = getAmtEnDesc(val);
                sb.Append(currencyISO).Append(" ");
                sb.Append(amtEnDesc[0]).Append(" ");
    
                if (amtEnDesc[1].Trim().Length != 0 && !"zero".Equals(amtEnDesc[1].Trim(), StringComparison.OrdinalIgnoreCase))
                {
                    sb.Append("point ").Append(amtEnDesc[1]);
                }
                sb.Append(" ").Append(suffix);
                return sb.ToString().ToUpper();
            }
    
            private static String convertLessThanOneThousand(long number)
            {
                String soFar;
                if (number % 100 < 20)
                {
                    soFar = FTConst.numNames[(int)(number % 100)];
                    number /= 100;
                }
                else
                {
                    soFar = FTConst.numNames[(int)(number % 10)];
                    number /= 10;
    
                    soFar = FTConst.tensNames[(int)(number % 10)] + soFar;
                    number /= 10;
                }
                if (number == 0)
                    return soFar;
                return FTConst.numNames[(int)number] + "hundred " + soFar;
            }
    
            //转换整数部分
            public static String convert(long number)
            {
                string[] majorNames = { " ", "thousand ",
    			"million ", "billion ", "trillion ", "quadrillion ",
    			"quintillion " };
                if (number == 0)
                {
                    return "zero ";
                }
                String prefix = " ";
                if (number < 0)
                {
                    number = -number;
                    prefix = "negative ";
                }
                String soFar = " ";
                int place = 0;
                do
                {
                    long n = (number % 1000);
                    if (n != 0)
                    {
                        String s = convertLessThanOneThousand(n);
                        soFar = s + majorNames[place] + soFar;
                    }
                    place++;
                    number /= 1000;
                } while (number > 0);
                return (prefix + soFar).Trim();
            }
    
            //转换小数部分
            public static String convertDot(string number)
            {
                if (number.Trim().Length == 0)
                {
                    return " ";
                }
                String soFar = " ";
                long c = Convert.ToInt64(number);
                do
                {
                    long n = (c % 10);
                    if (n != 0)
                    {
                        String s = convertLessThanOneThousand(n);
                        soFar = s + soFar;
                    }
    
                    c /= 10;
                } while (c > 0);
                return soFar.Trim();
            }
    
    
            private static String[] getAmtEnDesc(Decimal val)
            {
                String[] ret = new String[2];
                String valDes = val.ToString();
                String[] valSplit = valDes.Split('.');
                long part = Convert.ToInt64(valSplit[0]);
                ret[0] = convert(part);
                try
                {
                    ret[1] = convertDot(valSplit[1]);
                }
                catch
                {
                    ret[1] = "";
                }
                return ret;
            }

  • 相关阅读:
    树状数组&线段树
    8月7日小练
    8月6日小练
    LID&LDS 的另外一种算法
    LCS,LIS,LCIS
    8-11-Exercise
    8-10-Exercise
    线段树
    8-7-Exercise
    8-6-Exercise
  • 原文地址:https://www.cnblogs.com/fyq891014/p/4188760.html
Copyright © 2020-2023  润新知