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

C# 數字金額轉中文大寫(一):主流程與邊界處理

     編輯:關於C語言

主入口:ConvertSum


public string ConvertSum(string numStr)
{
    // 1. 合法性校驗
    if (!IsPositiveDecimal(numStr)) return "輸入的不是正數字!";
    if (double.Parse(numStr) > 999999999999.99) return "數字太大,請輸入一萬億元以下金額";

    // 2. 分離整數與小數
    string[] parts = numStr.Split('.');
    if (parts.Length == 1) // 純整數
        return ConvertData(parts[0]) + "圓整";

    // 3. 整數部分 + 小數部分
    string result = ConvertData(parts[0]) + "圓";
    result += ConvertXiaoShu(parts[1]);
    return result;
}

關鍵輔助方法

正數校驗


public bool IsPositiveDecimal(string s)
{
    if (!decimal.TryParse(s, out var d)) return false;
    return d > 0;
}

整數部分轉換(支持萬/億分組)


public string ConvertData(string intStr)
{
    int len = intStr.Length;
    if (len <= 4) return ConvertDigit(intStr);

    string result = "";
    if (len <= 8) // 萬級
    {
        string low = intStr.Substring(len - 4);
        string high = intStr.Substring(0, len - 4);
        result = ConvertDigit(high) + "萬" + ConvertDigit(low);
    }
    else if (len <= 12) // 億級
    {
        string low = intStr.Substring(len - 4);
        string mid = intStr.Substring(len - 8, 4);
        string high = intStr.Substring(0, len - 8);
        result = ConvertDigit(high) + "億" + ConvertDigit(mid) + "萬" + ConvertDigit(low);
    }

    // 統一清理多餘零
    result = result.Replace("零億", "億").Replace("零萬", "萬")
                   .Replace("零零", "零");
    // 處理尾部「佰零/仟零/萬零/億零」
    if (result.Length >= 2)
    {
        string tail = result.Substring(result.Length - 2);
        if (tail == "佰零" || tail == "仟零" || tail == "萬零" || tail == "億零")
            result = result.Substring(0, result.Length - 2) + tail[0];
    }
    return result;
}

小數部分轉換(角/分)


public string ConvertXiaoShu(string decStr)
{
    if (decStr.Length == 1)
        return ConvertChinese(decStr) + "角";
    // 取前兩位
    string r = ConvertChinese(decStr[0].ToString()) + "角" +
               ConvertChinese(decStr[1].ToString()) + "分";
    return r.Replace("零角", "").Replace("零分", "");
}

邊界與異常處理

  • 輸入非數字、負數、超範圍 → 返回友好錯誤提示字符串。
  • 小數位超過 2 位 → 僅取前兩位(角、分),其餘截斷。
  • 整數部分為 0 → ConvertData("0") 返回「零」,最終輸出「零圓...」。

擴展建議

  • 使用 decimal 而非 double 避免浮點誤差。
  • 將中文數字映射表提取為 static readonly string[],提升性能與可維護性。
  • 考慮實現 IFormatProvider/ICustomFormatter,支持 string.Format("{0:CNY}", amount) 風格調用。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved