@bitrixweb
Вечно молодой, вечно пьяный

Почему не работает toLocaleString() после toFixed()?

Всем привет! Задача - заменить разделитель (с точки на запятую) в числе с определенной точностью (для последующего копирования в эксель).
Почему это работает?
var a = 12.34;
a.toLocaleString() // 12,34


А это уже не работает?
var a = 12.34;
a.toFixed(2).toLocaleString() // 12.34
  • Вопрос задан
  • 119 просмотров
Решения вопроса 2
IvanU7n
@IvanU7n
nothing interesting here
потому что Number.toFixed() на удивление возвращает строку, для строки нужно что-то типа .replace('.', ',')

ПЛЮС: ну или сношения с Math.round() и потом .toLocaleString()
да и .toLocaleString() использует локаль браузера, которая не всегда бывает нужная, да ещё и вставит пробелы или запятые между разрядами
уж если нужен конкретный формат, то ЕМНИП .toLocaleString() принимает локаль в качестве параметра
Ответ написан
VoidVolker
@VoidVolker Куратор тега JavaScript
Dark side eye. А у нас печеньки! А у вас?
RTFM: Number.prototype.toFixed()

Return value
A string representing the given number using fixed-point notation.


UPD:
А как быть, если нужно сделать и toFixed() и toLocaleString('ru-RU')? К примеру, отобразить 1234.567 с точностью пять знаков и форматированием toLocaleString() (1 234,56700)?


Использовать Intl.NumberFormat():
new Intl.NumberFormat(undefined, { maximumFractionDigits: 5, minimumFractionDigits: 5 }).format(1234.567)
> "1 234,56700"
new Intl.NumberFormat('ru-RU', { maximumFractionDigits: 5, minimumFractionDigits: 5 }).format(1234.567)
> "1 234,56700"
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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