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

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

Ответы на вопрос(21)

C # 7.1 (возможно, раньше?) Делает это так просто и красиво, как и должно быть, с интерполяцией строк:

var jackpot = 1000000;
var niceNumberString = 
var jackpot = 1000000;
var niceNumberString = $"Jackpot is {jackpot:n}";
var niceMoneyString = $"Jackpot is {jackpot:C}";
quot;Jackpot is {jackpot:n}"; var niceMoneyString =
var jackpot = 1000000;
var niceNumberString = $"Jackpot is {jackpot:n}";
var niceMoneyString = $"Jackpot is {jackpot:C}";
quot;Jackpot is {jackpot:C}";
Решение Вопроса
String.Format("{0:n}", 1234);  // Output: 1,234.00
String.Format("{0:n0}", 9876); // No digits after the decimal point. Output: 9,876
String.Format("0,###.###"); also works with decimal places

просто так:

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

больше информации вВот

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

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"

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

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

или используя yourVariable

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

Я обнаружил, что это самый простой способ:

myInteger.ToString("N0")

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

var i = 5222000;
var s = 
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
quot;{i:n} is the number"; // results to > 5,222,000.00 is the number s =
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
quot;{i:n0} has no decimal"; // results to > 5,222,000 has no decimal

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

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

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

Если вы хотите конкретную культуру, вы можете попробовать это:

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

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

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

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

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

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

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

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):

(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:#,###,###.##}", MyNumber)

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

Ниже приведено хорошее решение на 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 ЛОКАЛЬНЫЙ ВЫХОД:$9,999,999.00

German Локаль выход

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

ВЫХОД:9.999.999,00 €

Indian Локаль выход

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

ВЫХОД:Rs.9,999,999.00

Estonian Локаль выход

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

ВЫХОД:9 999 999 €

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

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

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

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

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

устанавливает форматирование как «19 400 320»;

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

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

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

output 19,950,000

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

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

{
  formattedValue = result.ToString("C").Substring(1);
}
int num = 98765432;
Console.WriteLine(string.Format("{0:#,#}", num));
int number = 1000000000;
string whatYouWant = number.ToString("#,##0");
//You get: 1,000,000,000

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

Ваш ответ на вопрос