From 8b6e55e5d430ede6033b6702b7c213b69d3f28ed Mon Sep 17 00:00:00 2001 From: erjemin Date: Sun, 13 Nov 2022 02:23:30 +0300 Subject: [PATCH] =?UTF-8?q?=D1=84=D0=B8=D0=BB=D1=8C=D1=82=D1=80=20price=5F?= =?UTF-8?q?format=20(=D0=A4=D0=BE=D1=80=D0=BC=D0=B0=D1=82=D0=B8=D1=80?= =?UTF-8?q?=D1=83=D0=B5=D1=82=20=D1=87=D0=B8=D1=81=D0=BB=D0=B0,=20=D0=BD?= =?UTF-8?q?=D0=B0=D0=BF=D1=80=D0=B8=D0=BC=D0=B5=D1=80=20=D1=86=D0=B5=D0=BD?= =?UTF-8?q?=D1=8B,=20=D1=82=D0=B8=D0=BF=D0=B0=20=D0=B0=D0=BE=D1=82=20?= =?UTF-8?q?=D1=82=D0=B0=D0=BA:=2010=20000=20000.00)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- oknardia/oknardia/templatetags/filters.py | 46 +++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100755 oknardia/oknardia/templatetags/filters.py diff --git a/oknardia/oknardia/templatetags/filters.py b/oknardia/oknardia/templatetags/filters.py new file mode 100755 index 0000000..7983719 --- /dev/null +++ b/oknardia/oknardia/templatetags/filters.py @@ -0,0 +1,46 @@ +#! coding: utf-8 +__author__ = 'Sergei Erjemin' + +from django import template +register = template.Library() + + +@register.filter() +def price_format(value: float, seperator: str = ' ') -> str: + """ Форматирует длинные числа в удобочитаемый вид (делит на тысячи, миллионы, миллиарды и т.д.). + Работает для целых чисел и чисел с плавающей точкой. + 9837979.67 -> 9 837 979.67 + + :param value: число + :param seperator: str -- разделитель (по умолчанию - символ тонкой шпации (узкого пробела)  ) + :return: str -- строка в котором число с разделителями + """ + try: + if isinstance(value, int): + # Если число целое + value = str(value) + penny = '' # половинный пробел + else: + # Если число с плавающей точкой, десятичное или строка + value = str(value) + # value = "%.2f" % value + # знаки после целой части + penny = value[value.find('.'):] + # целая часть + value = value[:value.find('.')] + + # Если целая часть меньше 3-х символов - + # то ее разделять не нужно + if len(value) <= 3: + return value + penny + parts = [] + # Выбираем по три символа в список + while value: + parts.append(value[-3:]) + value = value[:-3] + # Сортируем список в обратном порядке + parts.reverse() + # Возвращаем результат + return seperator.join(parts) + penny + except (IndexError, ValueError): + return value