需要自定义货币格式才能与 String.Format 一起使用
-
23-08-2019 - |
题
我正在尝试在 C# 中使用 String.Format("{0:c}", somevalue) 但很难弄清楚如何配置输出以满足我的需求。这是我的需求:
- 0 输出到空白
- 1.00 输出为 1.00 美元
- 10.00 输出为 10.00 美元
- 100.00 输出为 100.00 美元
- 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);''")
如果您喜欢这种代码风格(就像我一样),第二种技术感觉更“流畅”。
不隶属于 StackOverflow