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

时间:2009-02-12 18:36:02

标签: c# currency 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
  6. 我已经尝试过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种情况的格式?我所阅读的所有文档仅详细介绍了基础知识,并未触及此类情景。

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);''")

如果您喜欢这种代码风格(就像我一样),第二种技术感觉更加流畅"