Используйте пользовательский разделитель тысяч в C#

Я пытаюсь не использовать', ' char как тысячный разделитель при отображении строки, но вместо этого использовать пробел. Я думаю, мне нужно определить пользовательскую культуру, но я, кажется, не понимаю ее правильно. Любой указатели?

например: дисплей 1000000 как 1 000 000 вместо 1,000,000

(нет, String.Replace() Это не решение, которое я хотел бы использовать: P)

4 ответов


Я предлагаю вам найти NumberFormatInfo что наиболее близко соответствует тому, что вы хотите (т. е. это прямо помимо разделителя тысяч), вызовите Clone() на нем, а затем установите NumberGroupSeparator собственность. (Если вы собираетесь форматировать номера с помощью валютных форматов, вам нужно изменить CurrencyGroupSeparator вместо/а.) Используйте это как информацию о формате для ваших звонков в string.Format etc, и вы должны быть в порядке. Например:

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
    }
}

создать свой собственный NumberFormatInfo (производная) с другим тысячным разделителем.


есть немного более простая версия Jon Skeet one:

using System;
using System.Globalization;

class Test
{
    static void Main()
    {
        NumberFormatInfo nfi = new NumberFormatInfo {NumberGroupSeparator = " ", NumberDecimalDigits = 0};

        Console.WriteLine(12345678.ToString("n", nfi)); // 12 345 678
    }
}

и инициализация " nfi " может быть пропущена и помещена непосредственно в качестве параметра в метод ToString ().


самый простой способ...

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