我正在尝试在C#中使用String.Format(“{0:c}”,somevalue),但我很难搞清楚如何配置输出以满足我的需求。以下是我的需求:
我已经尝试过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种情况的格式?我所阅读的所有文档仅详细介绍了基础知识,并未触及此类情景。
答案 0 :(得分:19)
如果您使用
string.Format("{0:$#,##0.00;($#,##0.00);''}", value)
您将获得零值的“”,其他值也应正确格式化。
答案 1 :(得分:4)
尝试这样的事情:
String currency = (number == 0) ? String.Empty : number.ToString("c");
答案 2 :(得分:4)
根据您是否始终对所有货币值使用相同的数据类型,您可以编写一个扩展方法,以便始终满足您的情况。例如,如果您使用的是十进制类型:
public static string ToCurrencyString (this decimal value)
{
if (value == 0)
return String.Empty;
return value.ToString ("C");
}
答案 3 :(得分:0)
Here's您可能会发现有用的优秀参考资料,它总结了这些数据:http://blog.stevex.net/string-formatting-in-csharp/
答案 4 :(得分:0)
" C"货币格式是很好的,直到你需要一个空格为0.这里有两种方法,一种是上面提到的,类似于我使用的方式,给你0的空白:
// one way
string.Format("{0:$#,##0.00;($#,##0.00);''}", somevalue)
// another way
somevalue.ToString("$#,##0.00;($#,##0.00);''")
如果您喜欢这种代码风格(就像我一样),第二种技术感觉更加流畅"