фильтр price_format (Форматирует числа, например цены, типа аот так: 10 000 000.00)

This commit is contained in:
2022-11-13 02:23:30 +03:00
parent 2164cac6cd
commit 8b6e55e5d4

View File

@@ -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 -> 9837979.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