zoukankan      html  css  js  c++  java
  • 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;
            }

  • 相关阅读:
    Cesium加载Geowebcache切片
    Vue开发--脚手架的搭建
    OpenLayers动态测量距离和面积,并可自定义测量的线样式
    OpenLayers要素拖拽
    改造SuperMap的DrawHandler接口,自定义绘制的图形样式
    Cesium动态绘制实体(点、标注、面、线、圆、矩形)
    ArcMap制图遇到的小问题
    GeoServer 2.15.2版本跨域问题解决方法
    MySQL 8.0 主从同步
    Service__cmd--MySQL安装并连接SQLyog
  • 原文地址:https://www.cnblogs.com/fyq891014/p/4188760.html
Copyright © 2011-2022 走看看