c# - пример - string.format java




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

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

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() ?


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

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

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


Если вы хотите показать его в 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

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

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

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

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


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

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

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

выход 19,950,000


Ниже приведено хорошее решение на 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


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


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

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

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

myInteger.ToString("N0")

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

String.Format("{0:#,###,###.##}", MyNumber)

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


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

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




.net