zoukankan      html  css  js  c++  java
  • 数字转大写

    转载:http://www.oschina.net/code/snippet_102306_4705

    1.JS实现方法

    static string ConvertToChinese(double x) 
        { 
            string s = x.ToString("#L#E#D#C#K#E#D#C#J#E#D#C#I#E#D#C#H#E#D#C#G#E#D#C#F#E#D#C#.0B0A"); 
            string d = Regex.Replace(s, @"((?<=-|^)[^1-9]*)|((?'z'0)[0A-E]*((?=[1-9])|(?'-z'(?=[F-L.]|$))))|((?'b'[F-L])(?'z'0)[0A-L]*((?=[1-9])|(?'-z'(?=[.]|$))))", "${b}${z}"); 
            return Regex.Replace(d, ".", m => "负元空零壹贰叁肆伍陆柒捌玖空空空空空空空分角拾佰仟萬億兆京垓秭穰"[m.Value[0] - '-'].ToString()); 
        } 

    2.C#实现方法

    private static String[] Ls_ShZ ={ "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖", "拾" };
    private static String[] Ls_DW_Zh ={ "元", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟", "万" };
    private static String[] Num_DW ={ "","拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟", "万" };
    private static String[] Ls_DW_X ={ "角", "分" };
     
    /// <summary>
    /// 金额小写转中文大写。
    /// 整数支持到万亿;小数部分支持到分(超过两位将进行Banker舍入法处理)
    /// </summary>
    /// <param name="Num">需要转换的双精度浮点数</param>
    /// <returns>转换后的字符串</returns>
    public static String NumGetStr(Double Num)
    {
        Boolean iXSh_bool = false;//是否含有小数,默认没有(0则视为没有)
        Boolean iZhSh_bool = true;//是否含有整数,默认有(0则视为没有)
     
        string NumStr;//整个数字字符串
        string NumStr_Zh;//整数部分
        string NumSr_X = "";//小数部分
        string NumStr_DQ;//当前的数字字符
        string NumStr_R = "";//返回的字符串
     
        Num = Math.Round(Num, 2);//四舍五入取两位
     
        //各种非正常情况处理
        if (Num < 0)
            return "不转换欠条";
        if (Num > 9999999999999.99)
            return "很难想象谁会有这么多钱!";
        if (Num == 0)
            return Ls_ShZ[0];
     
        //判断是否有整数
        if (Num < 1.00)
            iZhSh_bool = false;
     
        NumStr = Num.ToString();
     
        NumStr_Zh = NumStr;//默认只有整数部分
        if (NumStr_Zh.Contains("."))
        {//分开整数与小数处理
            NumStr_Zh = NumStr.Substring(0, NumStr.IndexOf("."));
            NumSr_X = NumStr.Substring((NumStr.IndexOf(".") + 1), (NumStr.Length - NumStr.IndexOf(".") - 1));
            iXSh_bool = true;
        }
     
     
        if (NumSr_X == "" || int.Parse(NumSr_X) <= 0)
        {//判断是否含有小数部分
            iXSh_bool = false;
        }
     
        if (iZhSh_bool)
        {//整数部分处理
            NumStr_Zh = Reversion_Str(NumStr_Zh);//反转字符串
     
            for (int a = 0; a < NumStr_Zh.Length; a++)
            {//整数部分转换
                NumStr_DQ = NumStr_Zh.Substring(a, 1);
                if (int.Parse(NumStr_DQ) != 0)
                    NumStr_R = Ls_ShZ[int.Parse(NumStr_DQ)] + Ls_DW_Zh[a] + NumStr_R;
                else if (a == 0 || a == 4 || a == 8)
                {
                    if (NumStr_Zh.Length > 8 && a == 4)
                        continue;
                    NumStr_R = Ls_DW_Zh[a] + NumStr_R;
                }
                else if (int.Parse(NumStr_Zh.Substring(a - 1, 1)) != 0)
                    NumStr_R = Ls_ShZ[int.Parse(NumStr_DQ)] + NumStr_R;
     
            }
     
            if (!iXSh_bool)
                return NumStr_R + "整";
     
            //NumStr_R += "零";
        }
     
        for (int b = 0; b < NumSr_X.Length; b++)
        {//小数部分转换
            NumStr_DQ = NumSr_X.Substring(b, 1);
            if (int.Parse(NumStr_DQ) != 0)
                NumStr_R += Ls_ShZ[int.Parse(NumStr_DQ)] + Ls_DW_X[b];
            else if (b != 1 && iZhSh_bool)
                NumStr_R += Ls_ShZ[int.Parse(NumStr_DQ)];
        }
     
        return NumStr_R;
     
    }
  • 相关阅读:
    腾讯课堂目标2017高中数学联赛基础班-2作业题解答-1
    腾讯课堂目标2017初中数学联赛集训队作业题解答-1
    2016猿辅导初中数学竞赛基础特训营作业题
    Markdown的基本语法
    解决网络图片加载出现403错误
    深入理解JS引擎的执行机制
    vue中moment.js的使用
    js中字符串 stringObject 的 replace() 方法
    Object.keys()方法
    webpack的require.context()实现路由“去中心化”管理
  • 原文地址:https://www.cnblogs.com/bfy-19/p/4802625.html
Copyright © 2011-2022 走看看