Имам доста обширен сайт на Django, който се занимава с валутни суми, които трябва да бъдат показани с 2 знака след десетичната запетая, но тъй като върху тези суми се извършват математически операции, зад кулисите се използват 4 знака след десетичната запетая. Някои страници получават тези суми чрез AJAX извиквания (като JSON), а други страници ги получават чрез стандартен изглед => предаване на променлива на шаблон. Моите модели използват models.DecimalField(max_digits=10, decimal_places=4, default=Decimal('0'))
Сайтът е достатъчно голям сега, че трябва да измисля последователен начин да се справя с това десетично закръгляване, но без значение по какъв начин го правя, изглежда неудобно. Ето двата начина, за които се сещам, но всеки не изглежда толкова идеален.
Frontend: изгледите оставят десетичните знаци непроменени, с 4 места. Шаблоните използват филтъра
floatformat:2
, а JS функциите използват.toFixed(2)
за преобразуване на входящи JSON данни. Проблем: трябва да се справите със закръгляването на много места в кода на шаблона и JS кода.Backend: изгледи закръглят всички десетични знаци до 2 места и ги предават като низове към шаблоните. По същия начин отговорите на входящи AJAX извиквания сериализират всички десетични знаци до 2 места. Проблем: изгледите вече обработват форматиране вместо шаблони и специални случаи не могат да бъдат форматирани по различен начин в шаблона.
Има ли "правилен, Djangonic" начин за обработка на десетично закръгляване?