javascript toLocaleString возвращает 0

1

Я считаю, что функцияLocaleString очень странная.

следующая строка вернет 0.003:

alert(0.0031.toLocaleString(2))

эта строка вернет 0:

alert(0.00031.toLocaleString(2))

Зачем?

Теги:

7 ответов

0
Лучший ответ

Метод toLocaleString() возвращает строку с чувствительным к языку представлением этого числа.

numObj.toLocaleString([locales [, options]]) имеет два параметра.

Ссылка https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString

    var num = 0.00031;
    console.log(num.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2}));
    console.log(num.toLocaleString(undefined, { maximumFractionDigits: 4}));
1

Это не допустимые параметры для метода toLocaleString.

Вы можете использовать параметр minimumFractionDigits следующим образом:

var res = 0.00031.toLocaleString(undefined, {minimumFractionDigits: 4});

console.log(res);
0

Согласно спецификации, первые два аргумента toLocaleString - это locale и options

Когда вызывается метод toLocaleString с необязательными аргументами locales и options, выполняются следующие шаги:

Когда этот API получает значение 2 или 3, он сначала пытается разрешить локали и если не найден проверку внутри поддерживаемых локалей.

Разрешенный локаль используется в качестве эффективного локали для форматирования числа в соответствии с языковым стандартом в репозитории данных Common Locale.

ПРИМЕЧАНИЕ. Рекомендуется, чтобы в реализациях использовались данные локали, предоставленные репозиторием данных Common Locale (доступный по адресу http://cldr.unicode.org/).

Согласно документации

Аргумент locales должен быть либо строкой, содержащей тег языка BCP 47, либо массив таких языковых тегов. Если аргумент locales не указан или не определен, используется локаль по умолчанию для среды исполнения.

Языковой тег BCP 47 определяет язык и минимально содержит первичный языковой код. В своей наиболее распространенной форме он может содержать: код языка, код сценария и код страны или региона, все разделенные дефисом. Хотя тег не чувствителен к регистру, рекомендуется использовать заголовок для кода сценария, верхний регистр для кода страны и региона и строчный регистр для всего остального.

Наконец, поиск выполняется для наилучшего соответствия поддерживаемых локалей в соответствии с логикой BCP47 в соответствии с локалями, зарегистрированными в реестре субтитров языка IANA, в соответствии с различными атрибутами упомянутого языка.

2 не соответствует ни одному из поддерживаемых локалей, поэтому значения максимальной доли по умолчанию в соответствии с вашей системной средой используются из доступного значения (в вашем случае это 3).

Следовательно, вы получаете

0.00031.toLocaleString(2) //"0"

0.0031.toLocaleString(2) //"0.003"
0

toLocaleString усекает и округляет десятичное число до трех цифр после десятичной.

0.0005.toLocaleString() 

например, вернет 0,001. 2 в том, что вы передаете как параметр метода, ничего не делает.

0

Число 2 в аргументе не имеет никакого значения. toLocaleString возвращает строку с чувствительным к языку представлением числа.

Во втором случае вашей проблемы это в основном 0.000 что равно 0

console.log("Passing argument    " + 0.0031.toLocaleString(2))

console.log("Without argument    " + 0.0031.toLocaleString())

console.log("Zeros  " + 0.000)
0

number.toLocaleString() возвращает языковое представление числа. Здесь, в вашем случае, вы сначала не передаете какую-либо информацию о локали, и вы не говорите этой функции, каков ваш максимальный предел.

См. Этот пример

0.0003.toLocaleString(undefined, {minimumFractionDigits: 2})
"0.00"
0.0003.toLocaleString(undefined, {minimumFractionDigits: 3})
"0.000"
0.0003.toLocaleString(undefined, {minimumFractionDigits: 4})
"0.0003
0

2 не является допустимым аргументом метода toLocaleString для Number. Вы можете передать только локаль, которая является строкой, и объект опций.

Опция объекта может использоваться, среди прочего, для указания числа цифр дроби:

number.toLocaleString(undefined, { maximumFractionDigits: 4 })

И значение по умолчанию для него составляет 3:

maximumFractionDigits

Максимальное количество цифр цифр. Возможные значения: от 0 до 20; по умолчанию для форматирования с простым номером больше, чем MinimumFractionDigits и 3; по умолчанию для форматирования валюты больше, чем MinimumFractionDigits и количество младших цифр, предоставленных кодом кода валюты ISO 4217 (2, если список не предоставляет эту информацию); по умолчанию для форматирования процентов больше, чем MinimumFractionDigits и 0.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню