Format a double value like currency but without the currency sign (C#)

后端 未结 9 825
無奈伤痛
無奈伤痛 2020-12-25 10:07

I feed a textbox a string value showing me a balance that need to be formatted like this:

###,###,###,##0.00

I could use the value.ToString

相关标签:
9条回答
  • 2020-12-25 10:13

    If the currency formatting gives you exactly what you want, clone a NumberFormatInfo with and set the CurrencySymbol property to "". You should check that it handles negative numbers in the way that you want as well, of course.

    For example:

    using System;
    using System.Globalization;
    
    class Test
    {
        static void Main()
        {
            NumberFormatInfo nfi = CultureInfo.CurrentCulture.NumberFormat;
            nfi = (NumberFormatInfo) nfi.Clone();
    
            Console.WriteLine(string.Format(nfi, "{0:c}", 123.45m));
            nfi.CurrencySymbol = "";
            Console.WriteLine(string.Format(nfi, "{0:c}", 123.45m));
        }
    }
    

    The other option is to use a custom numeric format string of course - it depends whether you really want to mirror exactly how a currency would look, just without the symbol, or control the exact positioning of digits.

    0 讨论(0)
  • 2020-12-25 10:16

    Have you tried:

    currentBalance.ToString("#,##0.00");
    

    This is the long-hand equivalent of:

    currentBalance.ToString("N2");
    
    0 讨论(0)
  • 2020-12-25 10:17

    You can do this with the group separator and the section separator, like this:

    currentBalance.ToString("#,0.00;(#,0.00)");
    

    This does not account for culture variances like the answer from @JonSkeet would, but this does mimic decimal place, rounding, thousands separation, and negative number handling that en-US culture currency format produces using a single custom format string.

    .NET Fiddle Demo

    0 讨论(0)
  • 2020-12-25 10:19
    var result = currentBalance.ToString("C").Replace(System.Globalization.CultureInfo.CurrentCulture.NumberFormat.CurrencySymbol, "");
    
    0 讨论(0)
  • 2020-12-25 10:19

    This simple solution works for me with US currency.

    If not needing international currency support use this and replace the $ with the currency symbol(s) to be removed:

    // for USD
    string result = currentBalance.ToString("C").Replace("$", "")
    

    or

    // for EUR
    string result = currentBalance.ToString("C").Replace("€", "")
    
    0 讨论(0)
  • 2020-12-25 10:21

    This may be overkill, but it rounds, formats...

    @helper TwoDecimalPlaces(decimal? val)
    {
        decimal x = 0;
        decimal y = 0;
        string clas = "text-danger";
        if (val.HasValue)
        {
            x = (decimal)val;
            if (val > 0)
            {
                clas = "";
            }
        }
        y = System.Math.Round(x, 2);
        IFormatProvider formatProvider = new System.Globalization.CultureInfo(string.Empty);
        <span class="@clas">@string.Format("{0:N2}", y)</span>
    }
    
    0 讨论(0)
提交回复
热议问题