Как бы я разделил тысячи с пространством в C#
предположим, что у меня есть следующий десятичный номер, который я должен отформатировать так, чтобы каждая тысяча была разделена пробелом:
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.
5 ответов
пройти в обычай NumberFormatInfo
с пользовательским NumberGroupSeparator
свойства, и использовать #,#
формат заставить его работать группам. В этом примере в качестве основы используется числовой формат инвариантной культуры.
var nfi = (NumberFormatInfo)CultureInfo.InvariantCulture.NumberFormat.Clone();
nfi.NumberGroupSeparator = " ";
string formatted = 1234897.11m.ToString("#,0.00", nfi); // "1 234 897.11"
вам нужен поставщик пользовательского формата номера, где вы сами меняете символ:
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
.
С строка пользовательского формата, но использовать " # " не " 0 - это обязательный токен, он будет там независимо от того, как долго число, знак фунта (#) является необязательным токеном, он будет использоваться только для цифр на самом деле в номере.
Decimal.ToString("# ###.00")
Примечание. Я оставлю это здесь, но ответ @Tim S лучше.
когда я пробую это, я вижу, что он генерирует только первый разделитель... Я думаю, что разделитель работает только для запятых и периодов здесь. Как обходной путь (до максимального размера, который вы ожидаете), попробуйте вместо этого.
Decimal.ToString("# ### ### ### ###.00")
попробуй такое
int testNumber = 134566548;
Console.WriteLine(string.Format("{0:N}", testNumber));
вы получили : 134 566 548,00
Не забывайте свою культуру.
Norwegian locale использует пробелы в качестве разделителя, поэтому, если вы разрабатывали веб-сайт или приложение специально для норвежцев, вы можете использовать:
(123897.11).ToString("n",new CultureInfo("nb-NO"))
что приводит к
"123 897,11"
очевидно, что если вы не пишете приложение для норвежского рынка, то это было бы глупое решение.