• 【转载】C# 阿拉伯数字转换为中文数字/中文数字转换为阿拉伯数字


    原文地址: https://www.cnblogs.com/yellow3gold/p/11338374.html

    1.阿拉伯数字转换为中文数字

    /// <summary>
    /// 阿拉伯数字转换成中文数字
    /// </summary>
    /// <param name="x"></param>
    /// <returns></returns>
    public string NumToChinese(string x)
    {
        string[] pArrayNum = { "", "", "", "", "", "", "", "", "", "" };
        //为数字位数建立一个位数组
        string[] pArrayDigit = { "", "", "", "" };
        //为数字单位建立一个单位数组
        string[] pArrayUnits = { "", "", "亿", "万亿" };
        var pStrReturnValue = ""; //返回值
        var finger = 0; //字符位置指针
        var pIntM = x.Length % 4; //取模
        int pIntK;
        if (pIntM > 0)
            pIntK = x.Length / 4 + 1;
        else
            pIntK = x.Length / 4;
        //外层循环,四位一组,每组最后加上单位: ",万亿,",",亿,",",万,"
        for (var i = pIntK; i > 0; i--)
        {
            var pIntL = 4;
            if (i == pIntK && pIntM != 0)
                pIntL = pIntM;
            //得到一组四位数
            var four = x.Substring(finger, pIntL);
            var P_int_l = four.Length;
            //内层循环在该组中的每一位数上循环
            for (int j = 0; j < P_int_l; j++)
            {
                //处理组中的每一位数加上所在的位
                int n = Convert.ToInt32(four.Substring(j, 1));
                if (n == 0)
                {
                    if (j < P_int_l - 1 && Convert.ToInt32(four.Substring(j + 1, 1)) > 0 && !pStrReturnValue.EndsWith(pArrayNum[n]))
                        pStrReturnValue += pArrayNum[n];
                }
                else
                {
                    if (!(n == 1 && (pStrReturnValue.EndsWith(pArrayNum[0]) | pStrReturnValue.Length == 0) && j == P_int_l - 2))
                        pStrReturnValue += pArrayNum[n];
                    pStrReturnValue += pArrayDigit[P_int_l - j - 1];
                }
            }
            finger += pIntL;
            //每组最后加上一个单位:",万,",",亿," 等
            if (i < pIntK) //如果不是最高位的一组
            {
                if (Convert.ToInt32(four) != 0)
                    //如果所有4位不全是0则加上单位",万,",",亿,"等
                    pStrReturnValue += pArrayUnits[i - 1];
            }
            else
            {
                //处理最高位的一组,最后必须加上单位
                pStrReturnValue += pArrayUnits[i - 1];
            }
        }
        return pStrReturnValue;
    }

    2.中文数字转换为阿拉伯数字

    /// <summary>
    /// 转换数字
    /// </summary>
    protected static long CharToNumber(char c)
    {
        switch (c)
        {
            case '': return 1;
            case '': return 2;
            case '': return 3;
            case '': return 4;
            case '': return 5;
            case '': return 6;
            case '': return 7;
            case '': return 8;
            case '': return 9;
            case '': return 0;
            default: return -1;
        }
    }
    
    /// <summary>
    /// 转换单位
    /// </summary>
    protected static long CharToUnit(char c)
    {
        switch (c)
        {
            case '': return 10;
            case '': return 100;
            case '': return 1000;
            case '': return 10000;
            case '亿': return 100000000;
            default: return 1;
        }
    }
    /// <summary>
    /// 将中文数字转换阿拉伯数字
    /// </summary>
    /// <param name="cnum">汉字数字</param>
    /// <returns>长整型阿拉伯数字</returns>
    public static long ParseCnToInt(string cnum)
    {
        cnum = Regex.Replace(cnum, "\s+", "");
        long firstUnit = 1;//一级单位
        long secondUnit = 1;//二级单位
        long result = 0;//结果
        for (var i = cnum.Length - 1; i > -1; --i)//从低到高位依次处理
        {
            var tmpUnit = CharToUnit(cnum[i]);//临时单位变量
            if (tmpUnit > firstUnit)//判断此位是数字还是单位
            {
                firstUnit = tmpUnit;//是的话就赋值,以备下次循环使用
                secondUnit = 1;
                if (i == 0)//处理如果是"十","十一"这样的开头的
                {
                    result += firstUnit * secondUnit;
                }
                continue;//结束本次循环
            }
            if (tmpUnit > secondUnit)
            {
                secondUnit = tmpUnit;
                continue;
            }
            result += firstUnit * secondUnit * CharToNumber(cnum[i]);//如果是数字,则和单位想乘然后存到结果里
        }
        return result;
    }
  • 相关阅读:
    Jenkins系列之二——centos 6.9 + JenKins 安装
    查看linux系统是运行在物理机还是虚拟机方法
    Java 的不可变类 (IMMUTABLE CLASS) 和 可变类 (MUTABLE CLASS)
    Java中的mutable和immutable对象实例讲解
    理解Java中的引用传递和值传递
    深入理解Java中的Clone与深拷贝和浅拷贝
    java Clone使用方法详解
    Java对象克隆(Clone)及Cloneable接口、Serializable接口的深入探讨
    赏美-第[001]期-20190504
    赏美-第[000]期
  • 原文地址:https://www.cnblogs.com/xinbaba/p/14241022.html
Copyright © 2020-2023  润新知