Skip to content

zzzkorn/russian_cost

Repository files navigation

Tests Lint

Описание модуля russian_cost


Оглавление

  1. Общая информация
  2. Помещение данных в класс и их вывод
  3. Формат вывода данных
  4. Пример использования в шаблонизаторах

Общая информация

Модуль russian_cost служит для преобразования стоимости в строку с использованием различных форматов вывода. Например:

Исходные данные Вывод
-0.11 - 11 копеек
-0.11 минус одиннадцать копеек
0.72 семьдесят две копейки
100020 сто тысяч двадцать рублей
1.12 один рубль 12 копеек
23.12 двадцать три рубля 12 копеек

Помещение данных в класс и их вывод

Предположим что у вас есть число, которое нужно преобразовать в стоимость:

from russian_cost import RussianCost

cost = RussianCost(-4.24)
print(cost)

# минус четыре рубля двадцать четыре копейки

Первым аргументов в конструктор класса передается сама стоимость, вторым аргументом передается формат вывода стоимости, по умолчанию он %S %R %P. Стоимость и формат вывода можно указывать при инициализации экземпляра класса:

from pprint import pprint

from russian_cost import RussianCost

cost = [
    RussianCost(-4.24),
    RussianCost(-999.1, out_format='%s %R %p'),
    RussianCost(-43.23, out_format='%s %r %p'),
    RussianCost(-43.23, out_format='%S %R и на сдачу %p'),
    RussianCost(0.23, out_format='Ваша сдача %p'),
]
pprint(cost)
# [минус четыре рубля двадцать четыре копейки,
#  - девятьсот девяносто девять рублей 10 копеек,
#  - 43 рубля 23 копейки,
#  минус сорок три рубля и на сдачу 23 копейки,
#  Ваша сдача 23 копейки]

Так и после объявления экземпляра класса:

from russian_cost import RussianCost

cost = RussianCost(-4.24)
print(cost)
# минус четыре рубля двадцать четыре копейки
cost.out_format = '%s %R %p'
print(cost)
# - четыре рубля 24 копейки
cost.cost = 34353.1
print(cost)
# тридцать четыре тысячи триста пятьдесят три рубля 10 копеек
cost.out_format = 'Ваша сдача %p (%P)'
print(cost)
# Ваша сдача 10 копеек (десять копеек)

Так же класс RussianCost поддерживает метод strfcost, который позволяет вывести стоимость в нужном формате, без изменения формата ввода класса out_format:

from russian_cost import RussianCost

cost = RussianCost(-4.24)
print(cost)
# минус четыре рубля двадцать четыре копейки
print(cost.strfcost('%s %R %p'))
# - четыре рубля 24 копейки

Формат вывода данных

Директива Значение Пример
%S Знак в текстовом виде минус
%s Знак в символьном виде -
%R Рубли в текстовом виде четыре рубля
%r Рубли в символьном виде 4 рубля
%P Копейки в текстовом виде двадцать четыре копейки
%p Копейки в символьном виде 24 копейки

Пример использования в шаблонизаторах

import jinja2
from docxtpl import DocxTemplate
from russian_cost import strfcost

context = dict(cost=12.34)
jinja_env = jinja2.Environment()
jinja_env.filters.update(strfcost=strfcost)
doc = DocxTemplate(template_path)
doc.render(context, jinja_env)
doc.save(result_path)

Внутри шаблона

{{cost|strfcost}}
....
{{cost|strfcost('%S %R и на сдачу %p')}}