@VVVV - тогда вы, вероятно, передаете строку вместо числа . Если у вас есть строка, вам нужно сначала конвертировать в float или double. Попробуйтеstring.Format("{0:n0}", Double.Parse(yourValue));
Это решение не годится с точки зрения интернационализации - другие культуры используют символы, отличные от ,разделителя тысяч, например пробел или даже ..
Джастин
6
Работает, спасибо + 1. Расширены, так что показывает до 2 дп число. ToString ("#, ## 0. ##")
Crab Bucket
8
@MacSigler На самом деле это не так, см. Комментарий Роджера Липскомба к ответу выше: String.Format будет применять локализацию автоматически.
Дэн Бешард
10
@MacSigler В том-то и дело, что этот код не всегда выводит запятую. Только тогда, когда культура ожидает запятые (например, en-US или инвариант). Если для культуры требуется другой разделитель (например .), .NET автоматически заменит запятую на этот разделитель. Опять же, я призываю вас прочитать ссылку, опубликованную Роджером, если вы все еще не понимаете, почему это так.
Дэн Бешард
4
@MacSigler Комментарий Джастина по-прежнему верен в том, что если вы явно не навязываете культуру в en-US, она унаследует настройки культуры от локальной машины. Насколько я понимаю, компиляция приведенного выше кода, а затем запуск его на двух машинах с разными культурами (с разными разделителями чисел) даст разные результаты. Если вы хотите, чтобы он всегда производил запятую, вам нужно явно установить культуру, которая использует запятую (например, инвариант).
Дэн Бешард
98
Если вы хотите конкретную культуру, вы можете попробовать это:
Метод ": n" лучше, так как он должен учитывать язык пользователя.
Торлак
12
Это правда, но не обязательно давать вам запятые в тысячу раз, потому что они уважают язык пользователя.
Стивен Райтон
2
Вернемся к вам: это правда, но не гарантируется соблюдение языкового стандарта пользователя, поскольку он использует запятые в качестве разделителя тысяч. (Например, в Португалии запятая вместо десятичного разделителя.)
ANeves
1
Если вы хотите применить значения после. вам нужно заменить # на 0. msdn.microsoft.com/en-us/library/0c899ak8(v=vs.110).aspx : ноль заменяет ноль соответствующей цифрой, если она есть; в противном случае в результирующей строке появляется ноль, а символ «#» заменяется соответствующей цифрой, если она есть; в противном случае никакая цифра не появляется в строке результата.
Клариса Бувер
этот метод работал нормально для моего требования, страница msdn о методе Int32.ToString, который будет основным местом его использования msdn.microsoft.com/en-us/library/8wch342y.aspx , не очень полезна для этого конкретного приложение либо
stackuser83
33
Ответ, получивший наибольшее количество голосов, был великолепным и помогал около 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) не изменилось. Для получения полной информации о том, что нового, вы можете перейти на эту страницу .
Если вы хотите принудительно использовать разделитель «,» независимо от языка (например, в трассировке или сообщении журнала), следующий код будет работать, и вы получите дополнительное преимущество, сообщая следующему парню, который наткнется на него, именно то, что вы делаете.
int integerValue =19400320;string formatted =string.Format(CultureInfo.InvariantCulture,"{0:N0}", integerValue);
В следующем примере отображаются несколько значений, отформатированных с использованием строк нестандартного формата, которые содержат нулевые заполнители.
Вы можете использовать функцию, подобную этой, для форматирования чисел и, при необходимости, для передачи нужных десятичных знаков. Если десятичные знаки не указаны, будут использоваться два десятичных знака.
Я использую десятичную, но вы можете изменить тип на любой другой или использовать анонимный объект. Вы также можете добавить проверку ошибок для отрицательных десятичных разрядов.
Метод, который я использовал, чтобы больше не беспокоиться о культурах и потенциальных проблемах форматирования, заключается в том, что я отформатировал его как валюту и впоследствии вынул символ валюты.
Этот код не зависит от культуры - он будет использовать любую культуру по умолчанию, установленную на компьютере, на котором выполняется код. Это может создать нежелательный вывод, когда эта культура помещает свои символы валюты в конце числа, а не в начале (например fr-FR), или использует более одного символа для обозначения валюты (например da-DK), или не разделяет тысячи, используя запятые (например, большинство материковой части Европы).
или для более надежного способа вы можете получить локаль конкретного места, а затем использовать, как показано ниже:
int n=9999999;Locale locale =newLocale("en","US");NumberFormat fmt =NumberFormat.getCurrencyInstance(locale);System.out.println(fmt.format(n));
Выход локали США : $ 9 999 999,00
Немецкий Локаль выход
Locale locale =newLocale("de","DE");
ВЫХОД: 9.999.999,00 €
Выход индийской локали
Locale locale =newLocale("de","DE");
ВЫХОД: 9 999 999,00 рупий
Эстонский Локаль выход
Locale locale =newLocale("et","EE");
ВЫХОД: 9 999 999 €
Как вы можете видеть в различных выходах вам не придется беспокоиться о Сепараторе быть запятой или точки или даже пространство вы можете получить номер отформатированных в соответствии со стандартами i18n
Правильно ли обнаружено, действительно ли это будет использоваться при получении экземпляра валюты, например: NumberFormat fmt = NumberFormat.getCurrencyInstance (locale); исправил код, спасибо!
Анируд
3
Вы проверили теги? Вопрос о C #, а не о Java!
Салар
-3
Если вы хотите показать его в DataGridview, вы должны изменить его тип, потому что по умолчанию это String, а поскольку вы меняете его на десятичный, он считается как число с плавающей запятой
Dim dt AsDataTable=NewDataTable
dt.Columns.Add("col1",GetType(Decimal))
dt.Rows.Add(1)
dt.Rows.Add(10)
dt.Rows.Add(2)DataGridView1.DataSource= dt
String.Format("{0:#,##0}", 1234);
также работает без десятичных знаков.string.Format("{0:n0}", Double.Parse(yourValue));
Я обнаружил, что это самый простой способ:
источник
источник
,
разделителя тысяч, например пробел или даже.
..
), .NET автоматически заменит запятую на этот разделитель. Опять же, я призываю вас прочитать ссылку, опубликованную Роджером, если вы все еще не понимаете, почему это так.Если вы хотите конкретную культуру, вы можете попробовать это:
(19950000.0).ToString("N",new CultureInfo("en-US"))
= 19 950 000,00(19950000.0).ToString("N",new CultureInfo("is-IS"))
= 19.950.000,00Примечание: некоторые культуры используют
,
для обозначения десятичной дроби, а не.
осторожны.источник
Стандартные форматы с соответствующими выводами,
Пример вывода (культура en-us):
источник
Это лучший формат. Работает во всех этих случаях:
источник
Это даст вам запятые в соответствующих точках.
источник
Ответ, получивший наибольшее количество голосов, был великолепным и помогал около 7 лет. С введением C # 6.0 и, в частности, String Interpolation, есть более удобный и, IMO, безопасный способ сделать то, что было задано
to add commas in thousands place for a number
:Где переменная
i
помещена вместо заполнителя (то есть{0}
). Таким образом, нет необходимости помнить, какой объект идет в какую позицию. Форматирование (т.е.:n
) не изменилось. Для получения полной информации о том, что нового, вы можете перейти на эту страницу .источник
просто так:
Больше информации здесь
источник
Если вы хотите принудительно использовать разделитель «,» независимо от языка (например, в трассировке или сообщении журнала), следующий код будет работать, и вы получите дополнительное преимущество, сообщая следующему парню, который наткнется на него, именно то, что вы делаете.
наборы в формате "19 400 320"
источник
В следующем примере отображаются несколько значений, отформатированных с использованием строк нестандартного формата, которые содержат нулевые заполнители.
Или
результат "29,255.0"
Или
результат "29 255,00"
источник
источник
Проще, используя строковую интерполяцию вместо String.Format
или используя yourVariable
источник
Например
String.Format("{0:0,0}", 1);
возвращает 01, для меня не действуетЭто работает для меня
выход 19,950,000
источник
Обратите внимание, что форматируемое значение должно быть числовым. Не похоже, что он займет строковое представление числа и формат с запятыми.
источник
C # 7.1 (возможно, раньше?) Делает это так же просто и красиво, как и должно быть, с интерполяцией строк:
источник
источник
Вы можете использовать функцию, подобную этой, для форматирования чисел и, при необходимости, для передачи нужных десятичных знаков. Если десятичные знаки не указаны, будут использоваться два десятичных знака.
Я использую десятичную, но вы можете изменить тип на любой другой или использовать анонимный объект. Вы также можете добавить проверку ошибок для отрицательных десятичных разрядов.
источник
Метод, который я использовал, чтобы больше не беспокоиться о культурах и потенциальных проблемах форматирования, заключается в том, что я отформатировал его как валюту и впоследствии вынул символ валюты.
if (decimal.TryParse(tblCell, out result))
источник
fr-FR
), или использует более одного символа для обозначения валюты (напримерda-DK
), или не разделяет тысячи, используя запятые (например, большинство материковой части Европы).Ниже приведено хорошее решение на Java!
или для более надежного способа вы можете получить локаль конкретного места, а затем использовать, как показано ниже:
Выход локали США : $ 9 999 999,00
Немецкий Локаль выход
ВЫХОД: 9.999.999,00 €
Выход индийской локали
ВЫХОД: 9 999 999,00 рупий
Эстонский Локаль выход
ВЫХОД: 9 999 999 €
Как вы можете видеть в различных выходах вам не придется беспокоиться о Сепараторе быть запятой или точки или даже пространство вы можете получить номер отформатированных в соответствии со стандартами i18n
источник
locale
??Если вы хотите показать его в DataGridview, вы должны изменить его тип, потому что по умолчанию это String, а поскольку вы меняете его на десятичный, он считается как число с плавающей запятой
источник