Как я могу отделить тысячи с пространством в С#
Предположим, что у меня есть следующее десятичное число, которое я должен отформатировать, чтобы каждая тысяча должна была быть разделена пробелом:
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.
Ответы
Ответ 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"
Очевидно, что если вы не пишете заявку на норвежский рынок, это будет глупое решение.