2009-02-12 42 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);''") 

第二种技术感觉更“流利”,如果你喜欢的代码风格(像我这样做)。