Ответы:
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:n0}", Double.Parse(yourValue));
Я обнаружил, что это самый простой способ:
myInteger.ToString("N0")
int number = 1000000000;
string whatYouWant = number.ToString("#,##0");
//You get: 1,000,000,000
,
разделителя тысяч, например пробел или даже .
.
.
), .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
Примечание: некоторые культуры используют ,
для обозначения десятичной дроби, а не .
осторожны.
Стандартные форматы с соответствующими выводами,
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:#,##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)
Это даст вам запятые в соответствующих точках.
Ответ, получивший наибольшее количество голосов, был великолепным и помогал около 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);
наборы в формате "19 400 320"
В следующем примере отображаются несколько значений, отформатированных с использованием строк нестандартного формата, которые содержат нулевые заполнители.
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"
int num = 98765432;
Console.WriteLine(string.Format("{0:#,#}", num));
Обратите внимание, что форматируемое значение должно быть числовым. Не похоже, что он займет строковое представление числа и формат с запятыми.
C # 7.1 (возможно, раньше?) Делает это так же просто и красиво, как и должно быть, с интерполяцией строк:
var jackpot = 1000000;
var niceNumberString = $"Jackpot is {jackpot:n}";
var niceMoneyString = $"Jackpot is {jackpot:C}";
String.Format("0,###.###"); also works with decimal places
Вы можете использовать функцию, подобную этой, для форматирования чисел и, при необходимости, для передачи нужных десятичных знаков. Если десятичные знаки не указаны, будут использоваться два десятичных знака.
public static string formatNumber(decimal valueIn=0, int decimalPlaces=2)
{
return string.Format("{0:n" + decimalPlaces.ToString() + "}", valueIn);
}
Я использую десятичную, но вы можете изменить тип на любой другой или использовать анонимный объект. Вы также можете добавить проверку ошибок для отрицательных десятичных разрядов.
Метод, который я использовал, чтобы больше не беспокоиться о культурах и потенциальных проблемах форматирования, заключается в том, что я отформатировал его как валюту и впоследствии вынул символ валюты.
if (decimal.TryParse(tblCell, out result))
{
formattedValue = result.ToString("C").Substring(1);
}
fr-FR
), или использует более одного символа для обозначения валюты (например da-DK
), или не разделяет тысячи, используя запятые (например, большинство материковой части Европы).
Ниже приведено хорошее решение на 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));
Выход локали США : $ 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
locale
??
Если вы хотите показать его в 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
String.Format("{0:#,##0}", 1234);
также работает без десятичных знаков.