C# 需要自定义货币格式才能与String.format一起使用

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);#}

我试图在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);#}”,somevalue),但对于1.0它输出$01.00。Format(“{0:$0.00;$(0.00);#}”,somevalue)适用于大多数情况,但当somevalue为1000.00时,输出为$1000.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)输出文本;