Как вызвать функцию javascript в HTML [duplicate]

Это все в «волшебном» синтаксисе вызова метода:

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));
687
задан Tamir Vered 18 December 2015 в 12:54
поделиться

20 ответов

String.Format("{0:n}", 1234); //Output: 1,234.00

string.Format("{0:n0}", 9876); // no digits after the decimal point. Output: 9,876
968
ответ дан JuanP. Zuniga 21 August 2018 в 11:39
поделиться
  • 1
    String.Format("{0:#,##0}", 1234); также работает без десятичных знаков. – Greg Bray 5 November 2010 в 04:50
  • 2
    Как я могу копировать & quot; N & quot; спецификатор, но с таким количеством десятичных цифр, сколько присутствует в номере? – Stephen Drew 23 November 2012 в 12:33
  • 3
    @Justin: Согласно msdn.microsoft.com/en-us/library/0c899ak8.aspx , символы «,» (и «.») Заменяются правильными локализованными символами. – Roger Lipscombe 4 March 2013 в 11:29
  • 4
    @RogerLipscombe Я не понял, что – Justin 4 March 2013 в 11:58
  • 5
    @VVVV - тогда вы, вероятно, передаете строку вместо number . Если у вас есть строка, вам нужно сначала преобразовать ее в float или double. Попробуйте string.Format("{0:n0}", Double.Parse(yourValue)); – ToolmakerSteve 26 October 2017 в 02:51

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

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

{
  formattedValue = result.ToString("C").Substring(1);
}
-2
ответ дан 8 John Volante 21 August 2018 в 11:39
поделиться
  • 1
    Этот код не является независимым от культуры - он будет использовать любую культуру по умолчанию, установленную на машине, на которой запущен код. Это может создать нежелательный вывод, когда эта культура помещает свои символы валюты в конце номера, а не в начало (например, fr-FR), или использует более одного символа для обозначения валюты (например, da-DK) или не отделяет тысячи с запятыми (например, большая часть континентальной Европы). – raveturned 13 June 2012 в 22:08
String.Format("0,###.###"); also works with decimal places
2
ответ дан Abolfazl Rastgou 21 August 2018 в 11:39
поделиться

Если вы хотите показать его в 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
-3
ответ дан Ali 21 August 2018 в 11:39
поделиться

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

-2
ответ дан Anirudh 21 August 2018 в 11:39
поделиться
  • 1
    где вы использовали переменную locale ?? – Smith 21 December 2013 в 22:29
  • 2
    правильно ли он определен, используется ли он для получения экземпляра валюты: NumberFormat fmt = NumberFormat.getCurrencyInstance (locale); исправил код, спасибо! – Anirudh 22 December 2013 в 08:05
  • 3
    Вы проверили теги? Вопрос в том, что C # не Java! – Salar 21 September 2015 в 04:50

просто так:

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

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

16
ответ дан a_m_dev 21 August 2018 в 11:39
поделиться

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

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

или используя вашVariable

 double yourVariable = 12456.0;
 $"{yourVariable:n0}"; 
 $"{yourVariable:n2}"; 
6
ответ дан brakeroo 21 August 2018 в 11:39
поделиться

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

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

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

output 19,950,000

9
ответ дан cmujica 21 August 2018 в 11:39
поделиться

Стандартные форматы со связанными выводами,

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
64
ответ дан CoderTao 21 August 2018 в 11:39
поделиться
  • 1
    Этот ответ набрал много полезной информации. Изучая пример, я вижу теперь, что означает 0 и 1 в строковом формате. – user420667 2 November 2016 в 17:58

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

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

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

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

86
ответ дан CodesInChaos 21 August 2018 в 11:39
поделиться
String.Format("{0:#,###,###.##}", MyNumber)

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

31
ответ дан Dan 21 August 2018 в 11:39
поделиться
  • 1
    & Quot; n: метод лучше, так как он должен уважать локаль пользователя. – Torlack 19 September 2008 в 22:30
  • 2
    Это верно, но это не гарантирует, что вы получите запятую в тысячу раз, потому что она уважает локаль пользователя. – Stephen Wrighton 19 September 2008 в 22:35
  • 3
    вернемся к вам: это правда, но не гарантируется уважение к языку пользователя, поскольку он использует запятые в качестве разделителя тысяч. (Например, в Португалии запятая вместо этого является десятичным разделителем.) – ANeves 19 May 2010 в 18:46
  • 4
    Если вы хотите использовать значения после. вам нужно заменить # на 0. msdn.microsoft.com/en-us/library/0c899ak8 (v = vs.110) .aspx : нуль заменяет нуль соответствующей цифрой, если один настоящее; в противном случае в строке результата появляется ноль, тогда как символ "#" символ заменяется соответствующей цифрой, если она присутствует; в противном случае цифра не появляется в строке результата. – cbillowes 6 February 2014 в 11:29
  • 5
    этот метод работал нормально для моего требования, на странице msdn о методе Int32.ToString, который будет основным местом, где он будет использоваться msdn.microsoft.com/en-us/library/8wch342y.aspx isn Очень полезно для этого конкретного приложения – stackuser83 25 March 2014 в 02:24

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

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
32
ответ дан Dennis 21 August 2018 в 11:39
поделиться
  • 1
    Что делать, если я хочу, чтобы точки разделились как тысяча разделителей и запятая в виде десятичного разделителя? – FrenkyB 12 September 2017 в 14:16
  • 2
    @FrenkyB "{0:#.##0,##}" должен работать – thefoxrocks 12 October 2017 в 17:54
  • 3
    upvoted, потому что он не отображает 12,314.0 (например, формат n1), но 12 314 :) – NDUF 26 April 2018 в 08:59

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

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

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

3
ответ дан dunwan 21 August 2018 в 11:39
поделиться

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

myInteger.ToString("N0")
300
ответ дан Jon Schneider 21 August 2018 в 11:39
поделиться
  • 1
    Вы также можете использовать его с string.Format, как в string.Format («Вот некоторое число с запятыми и без десятичных знаков, {0: N0}», 123456789 (; – Dan Morphis 21 October 2011 в 03:52
  • 2
    не должно быть myInteger.ToString («N0») ... string.tostring, я не думаю, что это сработает. – Taylor Brown 14 May 2014 в 23:05
  • 3
    Я знаю, что прошло уже 5 лет, но спасибо! Он работает для чисел & gt; 4 символа и & lt; 4 символа. – AskYous 18 May 2015 в 16:21
  • 4
    @AskYous - Ну, он также работает на 4 персонажа. Может также сказать, что он работает на любую длину. – Broots Waymb 17 November 2017 в 16:27
  • 5
    Это работает, но оно меняется в региональных настройках – saulyasar 27 March 2018 в 14:38
int num = 98765432;
Console.WriteLine(string.Format("{0:#,#}", num));
125
ответ дан p.campbell 21 August 2018 в 11:39
поделиться
  • 1
    Или Console.WriteLine (& quot; {0: #, #} ", num); если вы просто хотите его распечатать. Но string.Format (...) более полезен, я думаю. – Indy9000 25 August 2011 в 15:42
  • 2
    Это решение не хорошо с точки зрения интернационализации - в других культурах используются символы, отличные от ,, как разделитель тысяч, например пробел или даже .. – Justin 31 January 2012 в 19:04
  • 3
    Спасибо за работу + 1. Продлили, так что до 2 д.п. number.ToString (& Quot; #, ## 0 ## & Quot;). – Crab Bucket 30 March 2012 в 11:38
  • 4
    @MacSigler Это на самом деле не так, см. Комментарий Роджера Липсомба к ответу выше: String.Format автоматически применит локализацию. – Dan Bechard 17 October 2013 в 20:34
  • 5
    @MacSigler. Но все-таки этот код не всегда печатает запятую. Только тогда, когда культура является таковой, которая ожидает запятую (например, en-US или инвариант). Если культура является той, которая ожидает другого разделителя (например, .), .NET автоматически заменит запятую этим разделителем. Опять же, я призываю вас прочитать ссылку, размещенную Роджером, если вы все еще не понимаете, почему это так. – Dan Bechard 18 October 2013 в 19:33
  • 6
    Комментарий @MacSigler Justin по-прежнему правилен в том, что, если вы явно не навязываете культуру en-US, он наследует настройки культуры с локальной машины. Я понимаю, что компиляция кода выше, а затем запуск его на двух машинах с разными культурами (с разными разделителями чисел) приведет к различным результатам. Если вы хотите, чтобы always создавал запятую, вам нужно явно установить культуру, которая использует запятую (например, инвариант). – Dan Bechard 22 October 2013 в 15:12

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

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

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

19
ответ дан Ravi Desai 21 August 2018 в 11:39
поделиться

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

8
ответ дан user 21 August 2018 в 11:39
поделиться

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

19
ответ дан von v. 21 August 2018 в 11:39
поделиться

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

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"

17
ответ дан Yitzhak Weinberg 21 August 2018 в 11:39
поделиться
129
ответ дан p.campbell 1 November 2018 в 05:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: