首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# 數字金額轉中文大寫:完整支援整數、小數、萬/億單位

     編輯:關於C#

功能規格

  • 輸入:正數字串(含小數),最大支援 9,999 億(999999999999.99)。
  • 輸出:中文大寫金額,如 "壹仟貳佰叁拾肆圓伍角陸分"。
  • 單位:圓、角、分、拾、佰、仟、萬、億。
  • 零值處理:連續零合併、尾端零簡化(如「佰零」→「佰」)。

核心演算法

  1. 驗證輸入:Decimal.TryParse 確認正數,長度限制。
  2. 分割整數/小數:以小數點分離。
  3. 整數部分分段處理:每 4 位一組(個、萬、億),呼叫 Convert4Digit、Convert3Digit、Convert2Digit、ConvertDigit。
  4. 小數部分:角、分兩位獨立轉換,零值省略。
  5. 後處理清理:正則替換多餘「零」、「零萬」、「零億」等。

關鍵方法實作


public string ConvertSum(string numStr)
{
    if (!decimal.TryParse(numStr, out var val) || val <= 0) return "輸入必須為正數";
    if (val > 999999999999.99m) return "金額超過上限(9,999 億)";

    string[] parts = numStr.Split('.');
    string intPart = parts[0];
    string result = ConvertInteger(intPart) + "圓";

    if (parts.Length > 1) result += ConvertDecimal(parts[1]);
    else result += "整";

    return result;
}

private string ConvertInteger(string s)
{
    if (s.Length <= 4) return Convert4Digit(s.PadLeft(4, '0')).TrimStart('零');
    if (s.Length <= 8)
    {
        string high = s.Substring(0, s.Length - 4);
        string low = s.Substring(s.Length - 4);
        return ConvertInteger(high).TrimEnd('零') + "萬" + Convert4Digit(low).TrimStart('零');
    }
    // 8~12 位:億、萬、個
    string yi = s.Substring(0, s.Length - 8);
    string wan = s.Substring(s.Length - 8, 4);
    string ge = s.Substring(s.Length - 4);
    return ConvertInteger(yi).TrimEnd('零') + "億" +
           Convert4Digit(wan).TrimStart('零').TrimEnd('零') + "萬" +
           Convert4Digit(ge).TrimStart('零');
}

private string Convert4Digit(string four) // 四位字串,不足左補零
{
    string[] digits = { "零", "壹", "貳", "參", "肆", "伍", "陸", "柒", "捌", "玖" };
    string r = "";
    r += digits[four[0]-'0'] + "仟";
    r += digits[four[1]-'0'] + "佰";
    r += digits[four[2]-'0'] + "拾";
    r += digits[four[3]-'0'];
    return r.Replace("零仟", "零").Replace("零佰", "零").Replace("零拾", "零").Replace("零零", "零");
}

private string ConvertDecimal(string dec)
{
    if (dec.Length == 0) return "";
    string[] digits = { "零", "壹", "貳", "參", "肆", "伍", "陸", "柒", "捌", "玖" };
    string r = "";
    if (dec.Length >= 1) r += digits[dec[0]-'0'] + "角";
    if (dec.Length >= 2) r += digits[dec[1]-'0'] + "分";
    return r.Replace("零角", "").Replace("零分", "");
}

測試案例

輸入輸出
1234.56壹仟貳佰參拾肆圓伍角陸分
1000000壹佰萬圓整
100000000壹億圓整
1001001.01壹佰萬零壹仟零壹圓零壹分
0.1壹角

擴充建議

  • 支援負數、貨幣符號前綴。
  • 改用 StringBuilder 提升效能。
  • 單元測試覆蓋邊界:0、最大值、小數位數變化、全零段落。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved