C# 需要自定义货币格式才能与String.format一起使用
我试图在c#中使用String.Format(“{0:c}”,somevalue),但是我很难弄清楚如何配置输出以满足我的需要。以下是我的需要:C# 需要自定义货币格式才能与String.format一起使用,c#,currency,string.format,C#,Currency,String.format,我试图在c#中使用String.Format(“{0:c}”,somevalue),但是我很难弄清楚如何配置输出以满足我的需要。以下是我的需要: 0输出为空 1.00产出至1.00美元 10.00产出至10.00美元 100.00产出至100.00美元 1000.00输出到1000.00美元 我尝试了String.Format(“{0:c}”,somevalue),但对于零值,它输出$0.00,这不是我想要的。我还尝试了String.Format(“{0:$0,0.00;$(0,0.00);#}
是否有适合上述5种情况的格式?我只读的所有文档都详细介绍了基础知识,没有涉及这种情况。尝试以下内容:
String currency = (number == 0) ? String.Empty : number.ToString("c");
如果你使用
string.Format("{0:$#,##0.00;($#,##0.00);''}", value)
零值将得到“”,其他值的格式也应正确。根据您是否始终对所有货币值使用相同的数据类型,您可以编写一个扩展方法,使其始终符合您的情况。例如,如果您使用的是decimal类型:
public static string ToCurrencyString (this decimal value)
{
if (value == 0)
return String.Empty;
return value.ToString ("C");
}
您可能会发现一个非常有用的参考,它总结了这些数据:在您需要0的空白之前,“C”货币格式非常有用。这里有两种方法,上面提到的,类似于我使用的那些给你0的空白:
// one way
string.Format("{0:$#,##0.00;($#,##0.00);''}", somevalue)
// another way
somevalue.ToString("$#,##0.00;($#,##0.00);''")
如果你喜欢这种风格的代码(和我一样),第二种技术感觉更“流畅”。这就是我一直在寻找的。我在一个中继器中进行格式化,想要一些简单简洁的东西。Andrew的回答也很有效,如果我在codebehind中进行格式化,我会使用他的解决方案,甚至不会尝试找出String.Format。但我在寻找优雅的解决方案。并不是说任何人都能读懂我对这件事的想法+1.从我这里。。杰出的你能详细解释一下这是怎么工作的吗当值是一个数字时,字符串格式{0:a;B;C}会检查值是正的、负的还是零的。如果为正,则使用A,负使用B,零使用C作为格式。此解决方案忽略当前区域性/编号设置。是否可以使用相关的区域性设置(System.Globalization.CultureInfo.CurrentCulture.NumberFormat)格式化数字,但对于零可以为空?如果(money>0)输出文本;