JavaScript: форматирование целых чисел с помощью toLocaleString()
Я использую функцию Number.prototype.toLocaleString()
для добавления запятых к целым числам. Документацию для него можно найти здесь.
Я пишу его следующим образом:
Number(data).ToLocaleString('en');
В Firefox/Chrome номер отображается как 123,456,789
. Однако в IE он отображается как 123,456,789.00
.
1. Почему IE добавляет значения десятичной точки?
2. Как удалить значения десятичной точки?
Вместо создания/использования настраиваемой функции мне действительно интересно, есть ли опция, которую я могу добавить в ToLocaleString(), например en, nodecimal
. Если эта опция недоступна, я рассмотрю настраиваемую функцию.
Ответы
Ответ 1
Какую версию IE вы проверили? В IE 10 и ниже toLocaleString
основана на спецификации ECMAScript, которая гласит, что функция должна быть "зависимой от реализации". В IE 11 он основан на API интернационализации ECMA и должен соответствовать Firefox 26.
Чтобы удалить десятичные значения в IE 10 и ниже (и, возможно, другие старые браузеры), вам придется прибегнуть к манипуляции с строкой:
Number(data).toLocaleString('en').slice(0, -3);
Там также a polyfill доступен для этого API, который будет работать для IE 10 и ниже. Включение этого в настоящее время немного сложно, поскольку в браузере/мини-сборке нет фактических данных (потому что это было бы огромно). Данные предоставляются отдельно в формате JSON или JSONP, так что вы можете загрузить правильные данные для пользователя, просматривающего ваш сайт в данный момент.
Ответ 2
1) См. ответ Andy E (1).
2) Решение Andy E работает на IE 10 и ниже, но, похоже, вызывает неправильные выходы в современных браузерах (попробуйте в консоли с любым числом). Вот более безопасная манипуляция строк:
Number(data).toLocaleString().split('.')[0];
* Энди, я бы добавил это как комментарий к вашему ответу, но у меня недостаточно репутации.
Ответ 3
Число (данные).toLocaleString(). replace (/\ D\d\d $/, ''); должен охватывать любой язык и браузер.