C# 将数值金额转换为人民币大写(支持多个小数点)

static string[] ChineseNumbers = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
static string[] ChineseUnits = { "", "拾", "佰", "仟" };
static string[] ChineseGroupUnits = { "", "万", "亿", "万亿" };

public static void Main1()
{
    // 示例金额
    decimal amount = 123456089.12345m;

    string chineseAmount = ConvertToChineseAmount(amount);
    Console.WriteLine(chineseAmount);
}

static string ConvertToChineseAmount(decimal amount)
{
    if (amount == 0)
    {
        return "零元整";
    }

    string result = "";

    // 处理整数部分
    long integerPart = (long)Math.Floor(Math.Abs(amount));
    result += ConvertIntegerPartToChinese(integerPart);

    // 处理小数部分
    decimal decimalPart = Math.Abs(amount) - integerPart;
    result += ConvertDecimalPartToChinese(decimalPart);

    return result;
}

static string ConvertIntegerPartToChinese(long integerPart)
{
    string result = "";

    int groupIndex = 0;
    while (integerPart > 0)
    {
        int group = (int)(integerPart % 10000);
        if (group > 0)
        {
            result = ConvertGroupToChinese(group) + ChineseGroupUnits[groupIndex] + result;
        }

        integerPart /= 10000;
        groupIndex++;
    }

    return result + "元";
}

static string ConvertGroupToChinese(int group)
{
    string result = "";
    int unitIndex = 0;
    bool lastNonZero = false;

    while (group > 0)
    {
        int digit = group % 10;

        if (digit > 0)
        {
            result = ChineseNumbers[digit] + ChineseUnits[unitIndex] + result;
            lastNonZero = true;
        }
        else
        {
            if (lastNonZero)
            {
                result = ChineseNumbers[digit] + result;
                lastNonZero = false;
            }
        }

        group /= 10;
        unitIndex++;
    }

    return result;
}

static string ConvertDecimalPartToChinese(decimal decimalPart)
{
    if (decimalPart == 0)
    {
        return "整";
    }

    string result = "";

    for (int i = 1; i <= 5; i++)
    {
        int digit = (int)(decimalPart * 10);
        if (digit > 0)
        {
            result += ChineseNumbers[digit] + GetDecimalUnit(i);
        }

        decimalPart = (decimalPart * 10) - digit;
    }

    return result;
}

static string GetDecimalUnit(int position)
{
    switch (position)
    {
        case 1: return "角";
        case 2: return "分";
        case 3: return "厘";
        case 4: return "毫";
        case 5: return "丝";
        default: return "";
    }
}

输出结果:

image.png
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容