Каков десятичный символ разделителя в JavaScript?

Мысль показалась мне, я писал часть кода JavaScript, который обработал некоторые значения с плавающей точкой. Каков символ десятичной точки в JavaScript? Это всегда .? Или действительно ли это является определенным для культуры? И что относительно .toFixed() и .parseFloat()? Если я обработаю ввод данных пользователем, то он, вероятно, будет включать определенный для местной культуры десятичный символ разделителя.

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

Добавленный: хорошо, Rubens Farias предлагает посмотреть на подобный вопрос, который имеет аккуратный принятый ответ:

function whatDecimalSeparator() {
    var n = 1.1;
    n = n.toLocaleString().substring(1, 2);
   return n;
}

Это хорошо, это позволяет мне понять десятичную мысль локали. Шаг к решению, несомненно.

Теперь, остающаяся часть должна была бы определить что поведение .parseFloat() . Несколько ответов указывают на это для литералов с плавающей точкой только . допустимо. Делает .parseFloat() действовать одинаково? Или это могло бы потребовать локального десятичного разделителя в некотором браузере? Есть ли какие-либо различные методы для парсинга чисел с плавающей точкой также? Я должен развернуть свой собственный just-to-be-sure?

43
задан Community 23 May 2017 в 12:26
поделиться

3 ответа

Согласно спецификации, децималлатерный определяется как:

DecimalLiteral ::
    DecimalIntegerLiteral . DecimalDigitsopt ExponentPartopt 
    . DecimalDigits ExponentPartopt 
    DecimalIntegerLiteral ExponentPartopt

и для удовлетворения аргумента Parsefloat:

  1. Пусть входная строгая должна быть TOSTRING (строка).
  2. Пусть TrimmedString будет подстрокой входной строки, состоящей из левого персонажа, который не является настроек, и все символы справа от этого символа. (Другими словами, удалите ведущее белое пространство.)
  3. Если ни тренировка, ни любой префикс Триммедстринга удовлетворяет синтаксису Strdecimalliteral (см. 9.3.1), возврат NAN.
  4. Пусть Transistring является самым длинным префиксом TrummedString, что может быть самой тренировкой, что удовлетворяет синтаксису Strdecimalliteral.
  5. Вернуть числовое значение для MV

, поэтому USTITTRING становится самым длинным префиксом TRIMMEDSTRING, что удовлетворяет синтаксису Strdecimalliteral, что означает первый приспособленный буквальный номер строки, который он находит на входе. Только . Может использоваться для указания номера с плавающей точкой. Если вы принимаете входы из разных локалей, используйте строку Заменить:

function parseLocalNum(num) {
    return +(num.replace(",", "."));
}

Функция использует Onary Operator вместо Parsefloat, потому что мне кажется, что вы хотите быть строгими к входу. Parsefloat («1ABC») 1 , тогда как использование оператора Унарного + «1ABC» возвращается NAN . Это делает его намного легче подтвердить вход. Использование Parsefloat - просто угадать, что вход находится в правильном формате.

21
ответ дан 26 November 2019 в 23:09
поделиться

Режим 0x0d основан на planar , в то время как режим 0x13 отсутствует (без специальной конфигурации как режим X). Для просмотра работы в плоском режиме необходимо проверить дополнительные документы.

-121--3995789-

Насколько мне известно, сам javascript знает только о . разделитель для десятичных разрядов. По крайней мере, один человек, которому я доверяю вещи JS, согласен:

http://www.merlyn.demon.co.uk/js-maths.htm # DTS

-121--1149299-

используйте:

theNumber.toLocaleString();

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

12
ответ дан 26 November 2019 в 23:09
поделиться

Насколько я знаю, сам JavaScript только знает о . Разделитель для десятичных средств. По крайней мере, один человек, чье суждение которого я доверяю на JS-вещи, очаровавшись:

http://www.merlyn.demon.co.uk/js-maths.htm#dts

2
ответ дан 26 November 2019 в 23:09
поделиться
Другие вопросы по тегам:

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