2009-02-12 79 views
13

我想在C#中使用String.Format(「{0:c}」,somevalue),但我很難搞清楚如何配置輸出到滿足我的需求。這裏是我的需求:需要使用String.Format的自定義貨幣格式

  1. 0輸出空白
  2. 1.00輸出至$ 1.00
  3. 10.00輸出至$ 10.00
  4. 100.00輸出至$ 100.00
  5. 1000.00輸出至$ 1,000.00

我已經嘗試了String.Format(「{0:c}」,somevalue),但對於零值,它輸出$ 0.00,這不是我想要的。我也試過String.Format(「{0:$ 0,0.00; $(0,0.00);#}」,somevalue),但是對於1.0它輸出$ 01.00。 String.Format(「{0:$ 0.00; $(0.00);#}」,somevalue)適用於大多數情況,但當某個值爲1000.00時,輸出爲$ 1000.00。

是否有適合所有5種情況的格式?我讀過的所有文檔都只是基本的細節,並沒有涉及到這種情況。

+0

if(money> 0)輸出文本; – MrFox 2013-04-15 13:22:35

回答

19

如果使用

string.Format("{0:$#,##0.00;($#,##0.00);''}", value) 

您將獲得「」對於零值和其他值應正確格式化了。

+0

這是我一直在尋找的東西。我在Repeater中進行這種格式化,想要一些簡單而簡潔的東西。 – Notorious2tall 2009-02-12 19:02:49

+0

安德魯的迴應也起作用了,如果我在代碼隱藏方面這樣做,我會用他的解決方案去解決問題,甚至不去嘗試弄清楚String.Format。但我正在尋找優雅的解決方案。並不是說任何人都可以閱讀我的想法。 :) – Notorious2tall 2009-02-12 19:05:34

4

嘗試這樣:

String currency = (number == 0) ? String.Empty : number.ToString("c"); 
4

根據您是否始終對所有貨幣值使用相同的數據類型,您可以編寫一個擴展方法,以便始終滿足您的情況。例如,如果您正在使用十進制類型:

public static string ToCurrencyString (this decimal value) 
{ 
    if (value == 0) 
    return String.Empty; 
    return value.ToString ("C"); 
} 
0

的「C」貨幣格式是偉大的,直到你需要一個空白爲0.這裏有兩種方式,一是上面提到的,類似於我用的是那些給你空白0:

// one way 
string.Format("{0:$#,##0.00;($#,##0.00);''}", somevalue) 

// another way 
somevalue.ToString("$#,##0.00;($#,##0.00);''") 

第二種技術感覺更「流利」,如果你喜歡的代碼風格(像我這樣做)。