C# 將數(shù)值金額轉(zhuǎn)換為人民幣大寫(xiě)(支持多個(gè)小數(shù)點(diǎn))

static string[] ChineseNumbers = { "零", "壹", "貳", "叁", "肆", "伍", "陸", "柒", "捌", "玖" };
static string[] ChineseUnits = { "", "拾", "佰", "仟" };
static string[] ChineseGroupUnits = { "", "萬(wàn)", "億", "萬(wàn)億" };

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 = "";

    // 處理整數(shù)部分
    long integerPart = (long)Math.Floor(Math.Abs(amount));
    result += ConvertIntegerPartToChinese(integerPart);

    // 處理小數(shù)部分
    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 "";
    }
}

輸出結(jié)果:

image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容