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

常用數字處理小技巧:四捨五入、金額大寫轉換與實用工具方法

     編輯:關於ASP.NET

前言

程式開發中經常遇到數字格式化、精度控制、金額大寫轉換等需求。本文整理幾個常用的數字處理技巧,提供可直接引用的工具方法。

1. 計算結果四捨五入 (保留指定小數位)

標準 Math.Round 採用銀行家演算法 (四捨六入五成雙),若需傳統四捨五入,可使用以下方法:

/// 
/// 傳統四捨五入
/// 
/// 目標數值
/// 保留小數位數
/// 四捨五入後的數值
public static double RoundTraditional(double d, int i)
{
    double factor = Math.Pow(10, i);
    double sign = Math.Sign(d);
    return sign * Math.Floor(Math.Abs(d) * factor + 0.5) / factor;
}

2. 金額小寫轉大寫 (中文貨幣格式)

將數字金額轉換為中文大寫格式 (如:1234566789 → 壹拾貳億三仟肆佰伍拾陸萬陸仟柒佰捌拾玖元)

/// 
/// 金額轉中文大寫
/// 
/// 數字字串 (可含小數點)
/// 中文大寫金額字串
public static string ConvertToChineseCurrency(string amount)
{
    string[] units = { "分", "角", "元", "拾", "佰", "仟", "萬", "拾", "佰", "仟", "億", "拾", "佰", "仟", "兆" };
    string[] digits = { "零", "壹", "貳", "參", "肆", "伍", "陸", "柒", "捌", "玖" };

    // 處理小數點
    int dotIndex = amount.IndexOf('.');
    string integerPart, decimalPart = "";
    if (dotIndex >= 0)
    {
        integerPart = amount.Substring(0, dotIndex);
        decimalPart = amount.Substring(dotIndex + 1).PadRight(2, '0').Substring(0, 2);
    }
    else
    {
        integerPart = amount;
    }

    StringBuilder result = new StringBuilder();

    // 整數部分
    for (int i = 0; i < integerPart.Length; i++)
    {
        int digit = integerPart[integerPart.Length - 1 - i] - '0';
        if (digit != 0 || (i == 0 && integerPart.Length == 1))
        {
            result.Insert(0, units[i]);
            result.Insert(0, digits[digit]);
        }
        else if (i == 0 || i == 2 || i == 6 || i == 10) // 萬、億等單位
        {
            result.Insert(0, units[i]);
        }
    }

    // 小數部分
    if (decimalPart.Length > 0)
    {
        for (int i = 0; i < decimalPart.Length; i++)
        {
            int digit = decimalPart[i] - '0';
            if (digit != 0)
            {
                result.Append(digits[digit]);
                result.Append(units[1 - i]); // 角、分
            }
        }
    }

    // 處理連續零、尾部零等格式微調
    string str = result.ToString();
    str = str.Replace("零零", "零").Replace("零萬", "萬").Replace("零億", "億").Replace("零兆", "兆");
    if (str.EndsWith("零")) str = str.TrimEnd('零');
    if (str.StartsWith("元")) str = str.Substring(1); // 純小數情況
    return str + (str.Contains("元") ? "" : "元");
}

3. 其他實用擴充方法

public static class NumericExtensions
{
    /// 判斷是否為數值字串
    public static bool IsNumeric(this string s) => double.TryParse(s, out _);

    /// 安全轉換為 Int,失敗回傳預設值
    public static int ToInt(this string s, int defaultValue = 0) => int.TryParse(s, out var v) ? v : defaultValue;

    /// 格式化為千分位字串
    public static string ToThousandSeparated(this decimal d) => d.ToString("N0");

    /// 限制小數位數 (截斷而非四捨五入)
    public static decimal TruncateDecimals(this decimal d, int places)
    {
        decimal factor = (decimal)Math.Pow(10, places);
        return Math.Truncate(d * factor) / factor;
    }
}

總結

掌握這些數字處理技巧,能有效解決金融、報表、匯入匯出等常見業務場景的格式化需求。建議將常用方法封裝為靜態工具類或擴充方法,提升團隊開發效率與程式碼一致性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved