13

我正在尝试在 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 种情况的格式?我读过的所有文档都只详细介绍了基础知识,并没有涉及这种类型的场景。

4

5 回答 5

19

如果你使用

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

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

于 2009-02-12T18:56:39.013 回答
4

尝试这样的事情:

String currency = (number == 0) ? String.Empty : number.ToString("c");
于 2009-02-12T18:38:50.647 回答
4

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

public static string ToCurrencyString (this decimal value)
{
  if (value == 0)
    return String.Empty;
  return value.ToString ("C");
}
于 2009-02-12T18:57:48.073 回答
0

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

于 2009-02-12T19:08:03.103 回答
0

“C”货币格式非常好,直到您需要 0 的空白。这里有两种方法,上面提到的一种,类似于我使用的给您 0 的空白的方法:

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

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

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

于 2017-11-12T21:19:29.807 回答