Javascript-форум (https://javascript.ru/forum/)
-   Angular.js (https://javascript.ru/forum/angular/)
-   -   Красивое отображение цены (https://javascript.ru/forum/angular/72524-krasivoe-otobrazhenie-ceny.html)

monah1983 04.02.2018 17:07

Красивое отображение цены
 
Всем добрый день!
Передали на администрирование сайт, попросили чтобы красиво цены отображались, опыта js нету, поэтому тут и пишу
вот код отвечающий за вывод цены
e.displayPrice = function(e) {
        var t = Math.round(e);
        return t <= 999 ? t : t >= 1e3 && t <= 9999 ? t.toString().slice(0, 1) + " " + t.toString().slice(1) : t.toString().slice(0, 2) + " " + t.toString().slice(2)
    },

все красиво отображает, только если цена до 99 999, т.е. 5 654, 16 156 красиво отделяет сотые, но если цена больше 100 000, тогда отображается 12 4564, а надо 124 564, подскажите как сделать?

KonstBessonov 04.02.2018 17:41

А почему стандартная функция не подходит? https://developer.mozilla.org/en-US/...toLocaleString

Math.round(e).toLocaleString()
// А можно даже
Math.round(e).toLocaleString("ru-RU", {style: "currency", currency: "RUB"})
// Или
Math.round(e).toLocaleString("ru-RU", {style: "currency", currency: "EUR"})

laimas 04.02.2018 17:49

KonstBessonov, не все и все пока поддерживают.


monah1983,

(price+'').replace(/\B(?=(?:\d{3})+(?!\d))/g, ' ')

monah1983 04.02.2018 17:53

а в return тогда все убрать?
должно получится
e.displayPrice = function(e) {
        var t = Math.round(e).toLocaleString("ru-RU", {style: "currency", currency: "RUB"});
        return[B] t <= 999 ? t : t >= 1e3 && t <= 9999 ? t.toString().slice(0, 1) + " " + t.toString().slice(1) : t.toString().slice(0, 2) + " " + t.toString().slice(2)[/B] что с этим делать?
    },

laimas 04.02.2018 17:58

Написано же просто рег. выражение, чем не подходит?

monah1983 04.02.2018 18:08

Цитата:

Сообщение от laimas (Сообщение 477008)
KonstBessonov, не все и все пока поддерживают.


monah1983,

(price+'').replace(/\B(?=(?:\d{3})+(?!\d))/g, ' ')

СПАСИБО ВСЕ РАБОТАЕТ))) можно закрывать

KonstBessonov 04.02.2018 19:21

Цитата:

Сообщение от laimas (Сообщение 477008)
не все и все пока поддерживают.

Базовую toLocaleString() поддерживают вроде как все. Это стандарт ES3. А расширение с локалью и дополнительными опциями да - не все.


Часовой пояс GMT +3, время: 15:47.