C# MVC.Net format currency without decimals

前端 未结 3 602
青春惊慌失措
青春惊慌失措 2020-12-20 17:15

I\'m looking for a DataFormatString that will display a float as a currency. But omit the decimal values if they\'re irrelevant (0\'s).

At the moment I\'m using:

相关标签:
3条回答
  • 2020-12-20 17:49

    I don't think there is a way to do it that explicitly uses currency formatting, but you can use custom formatting using the # character: http://msdn.microsoft.com/en-us/library/0c899ak8.aspx

    This should work for U.S. currency:

    [DisplayFormat(DataFormatString = "{0:$#.##}")]
    

    The # character only represents a digit if it's needed.

    0 讨论(0)
  • 2020-12-20 17:57
    var price = 100.0M;
    var curr = price % 1 == 0 ? price.ToString("C0") : price.ToString("C");
    

    You can put this in an extension method and call it where you need it.

    0 讨论(0)
  • 2020-12-20 18:03
    [DisplayFormat(DataFormatString = "{0:C0}")]
    

    This should give you 0 decimals. But automatically rounds! so if you got ,56 it will round up to 1

    20000,00 => 20000 €

    20000,56 => 20001 €

    20000,49 => 20000 €

    /edit: I have borrowed an idea from here: c# Decimal to string for currency

    If you can convert your float value to decimal, you can use this Extensionmethod to omit the 0. It truncates the decimal and if this truncated value is equal to the original value, it cuts the zeros. If not, it displays 2 digits. I know this is no Dataformat string, but I'm not quiet sure, it can be done in an as simple way as an annotation.

    public static string ToCurrencyString(this decimal d)
    {
        return d.Equals(Decimal.Truncate(d)) ? d.ToString("0 €") : d.ToString("0.00 €");
    }
    
    0 讨论(0)
提交回复
热议问题