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

C# 自訂數值格式字串 ToString("###,###,##0.00") 完整教學與金額格式化實作

     編輯:關於C#

自訂數值格式規格字元

規格名稱說明範例 (1234.5)
0零佔位符有數字顯示數字,無則顯示 00000.00 → 1234.50
#數字佔位符有數字顯示數字,無則留空####.## → 1234.5
.小數點依 Culture 決定字元0.00 → 1234.50
,千分位分隔/縮放格式字串中出現則啟用千分位;靠近小數點時為縮放#,# → 1,234.5
%百分比乘 100 並加 %0% → 123450%
‰千分比乘 1000 並加 ‰
E / e科學標記法指數部分0.00E+0 → 1.23E+3
\c跳脫字元顯示字面字元 c\#0 → #1234
'...'字面字串單引號包裹'USD '0.00 → USD 1234.50
;區段分隔正數;負數;零;Null 四區段+0;-0;Zero

金額格式化常用模式

// 標準金額:千分位、兩位小數、不足補零
decimal amt = 1234567.5m;
amt.ToString("###,###,###,##0.00")   // 1,234,567.50
amt.ToString("N2")                   // 1,234,567.50 (標準格式 N2 等效)

// 會計格式:負數用括號、貨幣符號
amt.ToString("C2", new CultureInfo("zh-TW")) // NT$1,234,567.50
(-amt).ToString("C2", new CultureInfo("en-US")) // ($1,234,567.50)

// 固定寬度靠右 (報表對齊)
amt.ToString("0,0.00").PadLeft(15)   // "   1,234,567.50"

// 科學記號
(0.00123m).ToString("0.00E+00")      // 1.23E-03

動態精度格式化方法

/// 
/// 依精度產生金額格式字串:###,###,##0.00...
/// 
public string FormatAmount(decimal value, int decimalPlaces)
{
    if (decimalPlaces < 0) decimalPlaces = 0;
    if (decimalPlaces > 10) decimalPlaces = 10; // 限制上限

    string format = "###,###,###,##0";
    if (decimalPlaces > 0)
        format += "." + new string('0', decimalPlaces); // 小數點後全用 0 佔位

    return value.ToString(format);
}

// 使用範例
Console.WriteLine(FormatAmount(1234.5m, 2)); // 1,234.50
Console.WriteLine(FormatAmount(1234.5m, 4)); // 1,234.5000
Console.WriteLine(FormatAmount(1000000m, 0)); // 1,000,000

區段分隔號 (;) 進階應用

string fmt = "###,##0.00;(###,##0.00);Zero;Null";

1234.5m.ToString(fmt)   // 1,234.50
(-1234.5m).ToString(fmt) // (1,234.50)
0m.ToString(fmt)        // Zero
// Null 區段僅用於 nullable 型別 (decimal?) 為 null 時

文化特性 (CultureInfo) 影響

var val = 1234567.89m;

val.ToString("N2", CultureInfo.GetCultureInfo("zh-TW")) // 1,234,567.89 (千分位逗號、小數點)
val.ToString("N2", CultureInfo.GetCultureInfo("de-DE")) // 1.234.567,89 (千分位句點、小數逗號)
val.ToString("N2", CultureInfo.InvariantCulture)        // 1,234,567.89 (固定美式)

效能提示

  • ToString("N2") 等標準格式比自訂格式快 ~10-15% (內部快取)。
  • 高頻格式化 (每秒 > 10 萬次) 可預先建立 NumberFormatInfo 物件重用。
  • string.Format / FormattableString 多參數時效能優於插值字串。

偵錯視覺化

傳入參數:FormatAmount(2.0, 10)

輸出結果:

參考資源

原文連結:https://www.bianceng.cn/Programming/csharp/201410/45584.htm

MSDN 官方文件:Custom numeric format strings

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