需要使用自定义货币格式与String.Format一起使用

我正在尝试在C#中使用String.Format(“{0:c}”,somevalue),但我很难搞清楚如何配置输出以满足我的需求。 以下是我的需求:

  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)适用于大多数情况,但当somevalue为1000.00时,输出为$ 1000.00。

是否有适合所有5个案例的格式? 我阅读的所有文档仅详细介绍了基础知识,并未涉及此类方案。

如果你使用

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

您将获得零值的“”,其他值也应正确格式化。

尝试这样的事情:

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

根据您是否始终对所有货币值使用相同的数据类型,您可以编写一个扩展方法,以便始终满足您的情况。 例如,如果您使用的是十进制类型:

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

这是一个很有用的参考资料,它总结了这些数据: http : //blog.stevex.net/string-formatting-in-csharp/

“C”货币格式是很好的,直到你需要一个空白为0.这里有两种方法,一种是上面提到的,类似于我使用的那些给你0的空白:

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

如果您喜欢这种代码风格(就像我一样),第二种技术会更“流畅”。