How would I separate thousands with space in C#

后端 未结 6 1479
温柔的废话
温柔的废话 2020-12-08 19:00

Assume I have the following decimal number that I have to format so that every thousand should be separated with a space:

 897.11 to 897.11
 1897.11 to 1 897         


        
相关标签:
6条回答
  • 2020-12-08 19:25

    Sweden Use thousand separator as Space(" ") and Decimal point separator as Comma(,). We can achieve this in the following way.

    decimal myNumbber = 5878.476M;
    var swedishCulture = new CultureInfo("sv-SE");           
    swedishCulture.NumberFormat.NumberDecimalSeparator = ",";
    swedishCulture.NumberFormat.NumberGroupSeparator = " ";
    var s = myNumbber.ToString("#,###.00", swedishCulture);
    

    Which gives the output

    "5 878,48"
    
    0 讨论(0)
  • 2020-12-08 19:30

    try this

    int testNumber = 134566548;
    Console.WriteLine(string.Format("{0:N}", testNumber));
    

    You will received : 134 566 548,00

    Don't forget your culture.

    0 讨论(0)
  • 2020-12-08 19:31

    with a custom format string, but use '#' not '0's a 0 is a mandatory token it will be there no matter how long the number is, the pound sign (#) is optional token, it will only be used for digits actually in the number.

      Decimal.ToString("# ###.00")  
    

    NOTE. I'll leave this here, but @Tim S' answer is a better one.

    When I try this I see it only generates the first separator... I guess the separator only works for commas and periods here. As a workaround (up to the maximum size number you expect), try this instead.

      Decimal.ToString("# ### ### ### ###.00")  
    
    0 讨论(0)
  • 2020-12-08 19:33

    Norwegian locale uses spaces as a separator, so if you were designing a website or application specifically for Norwegians, then you could use:

    (123897.11).ToString("n",new CultureInfo("nb-NO"))
    

    Which results in

    "123 897,11"
    

    Obviously, if you're not writing an application for the Norwegian market, then this would be a silly solution.

    0 讨论(0)
  • 2020-12-08 19:36

    Pass in a custom NumberFormatInfo with a custom NumberGroupSeparator property, and use the #,# format to tell it to do number groups. This example uses the invariant culture's number format as its basis.

    var nfi = (NumberFormatInfo)CultureInfo.InvariantCulture.NumberFormat.Clone();
    nfi.NumberGroupSeparator = " ";
    string formatted = 1234897.11m.ToString("#,0.00", nfi); // "1 234 897.11"
    
    0 讨论(0)
  • 2020-12-08 19:47

    You need a custom number format provider where you change the character yourself:

        static void Main(string[] args)
        {
            decimal d = 2000000;
    
            var f = new NumberFormatInfo {NumberGroupSeparator = " "};
    
            var s = d.ToString("n", f); // 2 000 000.00
        }
    

    Here I also specify to format it as a number (using "n"), please see this link for other formatting options:

    Standard Numeric Format Strings

    In this case, it won't work if you format as a currency or a percentage, because as you may already note the NumberFormatInfo has separate properties for those.

    The current culture format info can be found on System.Globalization.CultureInfo.CurrentCulture.NumberFormat.

    0 讨论(0)
提交回复
热议问题