it-swarm.com.ru

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

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

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

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

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

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

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

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

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

91
prabir

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

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
67
CoderTao

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

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
36
Dennis
String.Format("{0:#,###,###.##}", MyNumber)

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

31
Stephen Wrighton

Ответ, получивший наибольшее количество голосов, был великолепным и помогал около 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) не изменилось. Для получения полной информации о том, что нового, вы можете перейти на эту страницу .

27
von v.

просто так: 

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

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

20
a_m_dev

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

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

наборы в формате «19 400 320»

20
Ravi Desai

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

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"

19
Yitzhak Weinberg
int num = 98765432;
Console.WriteLine(string.Format("{0:#,#}", num));
11
p.campbell

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

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

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

выход 19950000

9
cmujica

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

8
gjc

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

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

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

 double yourVariable = 12456.0;
 $"{yourVariable:n0}"; 
 $"{yourVariable:n2}"; 
7
brakeroo
String.Format("0,###.###"); also works with decimal places
4
Abolfazl Rastgou

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

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

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

3
dunwan

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

var jackpot = 1000000;
var niceNumberString = $"Jackpot is {jackpot:n}";
var niceMoneyString = $"Jackpot is {jackpot:C}";
0
Mark Zhukovsky