Подтвердить что ты не робот

Как я могу отделить тысячи с пространством в С#

Предположим, что у меня есть следующее десятичное число, которое я должен отформатировать, чтобы каждая тысяча должна была быть разделена пробелом:

 897.11 to 897.11
 1897.11 to 1 897.11
 12897.11 to 12 897.11
 123897.11 to 123 897.11

Я попытался Decimal.ToString( "0 000.00" ). Хотя это работает очень хорошо, когда число составляет 1897,11. Но когда он 897.11, я получаю 0 897.11.

4b9b3361

Ответ 1

Перейдите в пользовательский NumberFormatInfo с пользовательским NumberGroupSeparator свойство, и используйте #,# format, чтобы рассказать ему о количестве групп. В этом примере используется формат номера инвариантной культуры.

var nfi = (NumberFormatInfo)CultureInfo.InvariantCulture.NumberFormat.Clone();
nfi.NumberGroupSeparator = " ";
string formatted = 1234897.11m.ToString("#,0.00", nfi); // "1 234 897.11"

Ответ 2

Вам нужен пользовательский провайдер формата чисел, в котором вы сами меняете персонаж:

    static void Main(string[] args)
    {
        decimal d = 2000000;

        var f = new NumberFormatInfo {NumberGroupSeparator = " "};

        var s = d.ToString("n", f); // 2 000 000.00
    }

Здесь я также указываю, чтобы форматировать его как число (используя "n"), см. эту ссылку для других параметров форматирования:

Стандартные строки числового формата

В этом случае он не будет работать, если вы отформатируете его как валюту или процент, потому что, как вы уже заметили, у NumberFormatInfo есть отдельные свойства для них.

Текущую информацию о формате культуры можно найти на System.Globalization.CultureInfo.CurrentCulture.NumberFormat.

Ответ 3

со строкой , но используйте '#' not '0 a 0 - обязательный токен, он будет там независимо от того, как долго число, знак фунта (#) является необязательным токеном, он будет использоваться только для цифр, фактически входящих в число.

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

Примечание. Я оставлю это здесь, но ответ @Tim S лучше.

Когда я пытаюсь это сделать, я вижу, что он генерирует только первый разделитель... Я думаю, что разделитель работает только для запятых и периодов здесь. В качестве обходного пути (до максимального количества, которого вы ожидаете) попробуйте это вместо.

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

Ответ 4

попробуйте это

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

Вы получите: 134 566 548,00

Не забывайте свою культуру.

Ответ 5

Норвежский язык использует пробелы в качестве разделителя, поэтому, если вы разрабатываете веб-сайт или приложение специально для норвежцев, вы можете использовать:

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

В результате получается

"123 897,11"

Очевидно, что если вы не пишете заявку на норвежский рынок, это будет глупое решение.