views:

2797

answers:

3

Hi,

I'm trying not to use the ',' char as a thousand separator when displaying a string, but to use a space instead. I guess I need to define a custom culture, but I don't seem to get it right. Any pointers?

eg: display 1000000 as 1 000 000 instead of 1,000,000

(no, String.Replace() is not the solution I'd like to use :P)

+13  A: 

I suggest you find a NumberFormatInfo which most closely matches what you want (i.e. it's right apart from the thousands separator), call Clone() on it and then set the NumberGroupSeparator property. (If you're going to format the numbers using currency formats, you need to change CurrencyGroupSeparator instead/as well.) Use that as the format info for your calls to string.Format etc, and you should be fine. For example:

using System;
using System.Globalization;

class Test
{
    static void Main()
    {
        NumberFormatInfo nfi = (NumberFormatInfo)
            CultureInfo.InvariantCulture.NumberFormat.Clone();
        nfi.NumberGroupSeparator = " ";

        Console.WriteLine(12345.ToString("n", nfi)); // 12 345.00
    }
}
Jon Skeet
@Jon: You're so quick... but usually to the point and exact.
Lucero
That Skeet brand LoadBalancer has routing issues?
Dead account
Wow, Thank you Jon!
Luk
+8  A: 

Create your own NumberFormatInfo (derivative) with a different thousand separator.

Lucero
A: 

Easiest way...

num.ToString("### ### ### ### ##0.00")

Gordon Bell