/// <summary>
/// C#金额大写转小写
/// </summary>
public static decimal RMBChineseConvertToNumber(string str)
{
    str = str.Replace("零", "").Replace("整", "");

    var arr = str.ToCharArray();
    decimal money = 0;   //最终的金额

    bool yi = false;
    bool wan = false;
    bool qian = false;
    bool bai = false;
    bool shi = false;
    bool yuan = false;
    bool jiao = false;
    bool fen = false;

    for (int i = (arr.Length - 1); i >= 0; i--)
    {
        decimal cur = 0;

        if (arr[i] == '分')
        {
            fen = true;
            continue;
        }
        else if (arr[i] == '角')
        {
            jiao = true;
            fen = false;
            continue;
        }
        else if (arr[i] == '元')
        {
            yuan = true;
            jiao = false;
            fen = false;
            continue;
        }
        else if (arr[i] == '拾' || arr[i] == '十')
        {
            shi = true;
            yuan = false;
            jiao = false;
            fen = false;
            continue;
        }
        else if (arr[i] == '佰' || arr[i] == '百')
        {
            bai = true;
            shi = false;
            yuan = false;
            jiao = false;
            fen = false;
            continue;
        }
        else if (arr[i] == '仟' || arr[i] == '任' || arr[i] == '千')
        {
            qian = true;
            bai = false;
            shi = false;
            yuan = false;
            jiao = false;
            fen = false;
            continue;
        }
        else if (arr[i] == '万' || arr[i] == '萬')
        {
            wan = true;
            qian = false;
            bai = false;
            shi = false;
            yuan = false;
            jiao = false;
            fen = false;
            continue;
        }
        else if (arr[i] == '亿')
        {
            yi = true;
            wan = false;
            qian = false;
            bai = false;
            shi = false;
            yuan = false;
            jiao = false;
            fen = false;
            continue;
        }

        if (fen) cur = ConvertNameToSmall(arr[i]) * 0.01M;
        else if (jiao)
        {
            cur = ConvertNameToSmall(arr[i]) * 0.1M;
            jiao = false;
        }
        else if (shi) cur = ConvertNameToSmall(arr[i]) * 10;
        else if (bai) cur = ConvertNameToSmall(arr[i]) * 100;
        else if (qian) cur = ConvertNameToSmall(arr[i]) * 1000;
        else if (yuan) cur = ConvertNameToSmall(arr[i]) * 1;
        else
        {
            cur = ConvertNameToSmall(arr[i]);
        }

        if (yi)
        {
            cur = cur * 100000000;
        }
        else if (wan)
        {
            cur = cur * 10000;
        }
        else
        {
            //  cur = cur;
        }

        money += cur;
    }

    return money;
}

private static decimal ConvertNameToSmall(char str)
{
    decimal name = 0;
    switch (str.ToString())
    {
        case "零": name = 0M; break;
        case "〇": name = 0M; break;
        case "壹": name = 1M; break;
        case "一": name = 1M; break;
        case "贰": name = 2M; break;
        case "二": name = 2M; break;
        case "叁": name = 3M; break;
        case "三": name = 3M; break;
        case "肆": name = 4M; break;
        case "四": name = 4M; break;
        case "伍": name = 5M; break;
        case "五": name = 5M; break;
        case "陆": name = 6M; break;
        case "六": name = 6M; break;
        case "柒": name = 7M; break;
        case "七": name = 7M; break;
        case "捌": name = 8M; break;
        case "八": name = 8M; break;
        case "玖": name = 9M; break;
        case "九": name = 9M; break;
        default: break;
    }
    return name;
}

By WuHen

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Share via
Copy link