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 $/, ''); должен охватывать любой язык и браузер.