.NET String.Format () для добавления запятых в тысячи мест для номера

Я хочу добавить запятую в тысячу мест для числа. String.Format() ?

 String.Format("{0:n}", 1234); //Output: 1,234.00 string.Format("{0:n0}", 9876); // no digits after the decimal point. Output: 9,876 

Я нашел это самым простым способом:

 myInteger.ToString("N0") 
 int number = 1000000000; string whatYouWant = number.ToString("#,##0"); //You get: 1,000,000,000 

Если вы хотите, чтобы культура была специфической, вы можете попробовать:

(19950000.0).ToString("N",new CultureInfo("en-US")) = 19,950,000.00

(19950000.0).ToString("N",new CultureInfo("is-IS")) = 19.950.000,00

Примечание. В некоторых культурах используется десятичная, а не десятичная . так что будь осторожен.

Стандартные форматы с их соответствующими результатами,

 Console.WriteLine("Standard Numeric Format Specifiers"); String s = String.Format("(C) Currency: . . . . . . . . {0:C}\n" + "(D) Decimal:. . . . . . . . . {0:D}\n" + "(E) Scientific: . . . . . . . {1:E}\n" + "(F) Fixed point:. . . . . . . {1:F}\n" + "(G) General:. . . . . . . . . {0:G}\n" + " (default):. . . . . . . . {0} (default = 'G')\n" + "(N) Number: . . . . . . . . . {0:N}\n" + "(P) Percent:. . . . . . . . . {1:P}\n" + "(R) Round-trip: . . . . . . . {1:R}\n" + "(X) Hexadecimal:. . . . . . . {0:X}\n", - 1234, -1234.565F); Console.WriteLine(s); 

Пример вывода (en-us culture):

 (C) Currency: . . . . . . . . ($1,234.00) (D) Decimal:. . . . . . . . . -1234 (E) Scientific: . . . . . . . -1.234565E+003 (F) Fixed point:. . . . . . . -1234.57 (G) General:. . . . . . . . . -1234 (default):. . . . . . . . -1234 (default = 'G') (N) Number: . . . . . . . . . -1,234.00 (P) Percent:. . . . . . . . . -123,456.50 % (R) Round-trip: . . . . . . . -1234.565 (X) Hexadecimal:. . . . . . . FFFFFB2E 

Это лучший формат. Работает во всех этих случаях:

 String.Format( "{0:#,##0.##}", 0 ); // 0 String.Format( "{0:#,##0.##}", 0.5 ); // 0.5 - some of the formats above fail here. String.Format( "{0:#,##0.##}", 12314 ); // 12,314 String.Format( "{0:#,##0.##}", 12314.23123 ); // 12,314.23 String.Format( "{0:#,##0.##}", 12314.2 ); // 12,314.2 String.Format( "{0:#,##0.##}", 1231412314.2 ); // 1,231,412,314.2 
 String.Format("{0:#,###,###.##}", MyNumber) 

Это даст вам запятую в соответствующих точках.

Если вы хотите заставить «,» разделитель независимо от культуры (например, в сообщении трассировки или журнала), следующий код будет работать и имеет дополнительное преимущество, чтобы рассказать о следующем парне, который наткнулся на него точно, что вы делаете.

 int integerValue = 19400320; string formatted = string.Format(CultureInfo.InvariantCulture, "{0:N0}", integerValue); 

наборы, отформатированные на “19,400,320”

Самый проголосовавший ответ был отличным и полезен около 7 лет. С введением C # 6.0 и, в частности, String Interpolation есть более аккуратный и более безопасный IMO способ сделать то, что было предложено to add commas in thousands place for a number :

 var i = 5222000; var s = $"{i:n} is the number"; // results to > 5,222,000.00 is the number s = $"{i:n0} has no decimal"; // results to > 5,222,000 has no decimal 

Где переменная i помещается вместо заполнителя (т.е. {0} ). Поэтому нет необходимости помнить, какой объект переходит в какую позицию. Форматирование (т :n ) не изменилось. Для получения полной информации о том, что нового, вы можете перейти на эту страницу .

В следующем примере показаны несколько значений, которые форматируются с использованием строк пользовательского формата, которые include нулевые заполнители.

 String.Format("{0:N1}", 29255.0); 

Или

 29255.0.ToString("N1") 

результат “29 255,0”

 String.Format("{0:N2}", 29255.0); 

Или

 29255.0.ToString("N2") 

результат “29 255,00”

просто как это:

 float num = 23658; // for example num = num.ToString("N0"); // Returns 23,658 

больше информации здесь

 int num = 98765432; Console.WriteLine(string.Format("{0:#,#}", num)); 

Например String.Format("{0:0,0}", 1); возвращает 01, для меня недействительно

Это работает для меня

 19950000.ToString("#,#", CultureInfo.InvariantCulture)); 

выход 19,950,000

Обратите внимание, что значение, которое вы форматируете, должно быть числовым. Это не похоже на то, что строка будет содержать строковое представление и формат с запятыми.

Упрощен, используя строчную интерполяцию вместо String.Format

  $"{12456:n0}"; // 12,456 $"{12456:n2}"; // 12,456.00 

или с помощью yourVariable

  double yourVariable = 12456.0; $"{yourVariable:n0}"; $"{yourVariable:n2}"; 

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

  public static string formatNumber(decimal valueIn=0, int decimalPlaces=2) { return string.Format("{0:n" + decimalPlaces.ToString() + "}", valueIn); } 

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

 String.Format("0,###.###"); also works with decimal places 

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

if (decimal.TryParse(tblCell, out result))

 { formattedValue = result.ToString("C").Substring(1); } 

Ниже приведено хорошее решение на Java!

 NumberFormat fmt = NumberFormat.getCurrencyInstance(); System.out.println(fmt.format(n)); 

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

 int n=9999999; Locale locale = new Locale("en", "US"); NumberFormat fmt = NumberFormat.getCurrencyInstance(locale); System.out.println(fmt.format(n)); 

US Locale OUTPUT: 9 999 999,00 долларов США

Выход немецкого языка

 Locale locale = new Locale("de", "DE"); 

ВЫХОД: 9,999.999,00 €

Вывод индийской локали

 Locale locale = new Locale("de", "DE"); 

ВЫХОД: 9 999 999,00 рупий

Выход на Эстонский язык

 Locale locale = new Locale("et", "EE"); 

ВЫХОД: 9 999 999 €

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

Если вы хотите показать его в DataGridview, вы должны изменить его тип, потому что по умолчанию это String, и поскольку вы меняете его на десятичный, он считает Number с плавающей запятой

 Dim dt As DataTable = New DataTable dt.Columns.Add("col1", GetType(Decimal)) dt.Rows.Add(1) dt.Rows.Add(10) dt.Rows.Add(2) DataGridView1.DataSource = dt 
  • Наследование и перегрузка метода
  • Как разбирать строку в nullable int
  • C ++: long long int vs. long int vs. int64_t
  • Проект Xamarin не работает, assembly не найдена
  • Изменение уровня громкости
  • Каковы различия между -std = c ++ 11 и -std = gnu ++ 11?
  • Как иметь статические члены данных в библиотеке только для заголовков?
  • Есть ли эквивалент Java или методология для ключевого слова typedef в C ++?
  • Библиотеки обработки изображений с быстрой кросс-платформенной C / C ++
  • Как сравнить объект Color и получить ближайший цвет в цвете ?
  • Как конкатенировать std :: string и int?
  • Давайте будем гением компьютера.