我正在尝试在 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);''")

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top