Это все в «волшебном» синтаксисе вызова метода:
object.property();
Когда вы получаете свойство из объекта и вызываете его за один раз, объект будет контекстом для метода , Если вы вызываете тот же метод, но в отдельных шагах, контекст представляет собой глобальную область (окно):
var f = object.property;
f();
Когда вы получаете ссылку на метод, он больше не привязан к объекту, это просто ссылка на простую функцию. То же самое происходит, когда вы получаете ссылку на использование в качестве обратного вызова:
this.saveNextLevelData(this.setAll);
Здесь вы привязываете контекст к функции:
this.saveNextLevelData(this.setAll.bind(this));
Если вы используете jQuery вы должны использовать метод $.proxy
, а bind
не поддерживается во всех браузерах:
this.saveNextLevelData($.proxy(this.setAll, this));
String.Format("{0:n}", 1234); //Output: 1,234.00
string.Format("{0:n0}", 9876); // no digits after the decimal point. Output: 9,876
Метод, который я больше не беспокоился о культурах и проблемах с форматированием, заключается в том, что я отформатировал его как валюту и затем вынул символ валюты.
if (decimal.TryParse(tblCell, out result))
{
formattedValue = result.ToString("C").Substring(1);
}
fr-FR
), или использует более одного символа для обозначения валюты (например, da-DK
) или не отделяет тысячи с запятыми (например, большая часть континентальной Европы).
– raveturned
13 June 2012 в 22:08
String.Format("0,###.###"); also works with decimal places
Если вы хотите показать его в 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
Ниже приведено хорошее решение на 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");
OUTPUT: 9.999.999,00 €
Индийский локальный выход
Locale locale = new Locale("de", "DE");
OUTPUT: Rs. 9,999,999.00
Выход в Эстонский локаль
Locale locale = new Locale("et", "EE");
OUTPUT: 9 999 999 €
Как вы можете видеть на разных выходах, вам не нужно беспокоиться о разделитель представляет собой запятую или точку или даже пространство, вы можете получить номер, отформатированный в соответствии со стандартами i18n
просто так:
float num = 23658; // for example
num = num.ToString("N0"); // Returns 23,658
больше информации находится в Здесь
Упрощен, используя строчную интерполяцию вместо String.Format
$"{12456:n0}"; // 12,456
$"{12456:n2}"; // 12,456.00
или используя вашVariable
double yourVariable = 12456.0;
$"{yourVariable:n0}";
$"{yourVariable:n2}";
Например, String.Format("{0:0,0}", 1);
возвращает 01, для меня это неверно
Это работает для меня
19950000.ToString("#,#", CultureInfo.InvariantCulture));
output 19,950,000
Стандартные форматы со связанными выводами,
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
Если вы хотите, чтобы культура была специфической, вы можете попробовать следующее:
(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:#,###,###.##}", MyNumber)
Это даст вам запятые в соответствующих точках.
Это лучший формат. Работает во всех этих случаях:
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
Вы можете использовать такую функцию, чтобы форматировать числа и, необязательно, передавать нужные десятичные знаки. Если десятичные разряды не указаны, он будет использовать два десятичных знака.
public static string formatNumber(decimal valueIn=0, int decimalPlaces=2)
{
return string.Format("{0:n" + decimalPlaces.ToString() + "}", valueIn);
}
Я использую десятичную, но вы можете изменить тип на любой другой или использовать анонимный объект. Вы также можете добавить проверку ошибок для отрицательных значений десятичной точки.
Я нашел, что это самый простой способ:
myInteger.ToString("N0")
int num = 98765432;
Console.WriteLine(string.Format("{0:#,#}", num));
,
, как разделитель тысяч, например пробел или даже .
.
– Justin
31 January 2012 в 19:04
.
), .NET автоматически заменит запятую этим разделителем. Опять же, я призываю вас прочитать ссылку, размещенную Роджером, если вы все еще не понимаете, почему это так.
– Dan Bechard
18 October 2013 в 19:33
Если вы хотите форматировать разделитель «,» независимо от культуры (например, в сообщении трассировки или журнала), следующий код будет работать и имеет дополнительное преимущество, чтобы сообщить следующему парню, который наткнулся на него точно, что вы .
int integerValue = 19400320;
string formatted = string.Format(CultureInfo.InvariantCulture, "{0:N0}", integerValue);
устанавливает формат «19,400,320»
Обратите внимание, что значение, которое вы форматируете, должно быть числовым. Это не похоже на то, что для строкового представления числа и формата будет запятая.
Самый проголосовавший ответ был отличным и полезен около 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
) не изменилось. Для получения полной информации о том, что нового, вы можете перейти на эту страницу .
В следующем примере показаны несколько значений, отформатированных с использованием строк пользовательского формата, которые включают нулевые заполнители.
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("{0:#,##0}", 1234);
также работает без десятичных знаков. – Greg Bray 5 November 2010 в 04:50string.Format("{0:n0}", Double.Parse(yourValue));
– ToolmakerSteve 26 October 2017 в 02:51