Python / Django: если 5 и 5.00 - это разные значения (в десятичном виде), тогда - PullRequest
0 голосов
/ 07 января 2010

Если 5, 5.00 и 5.000 все разные, то почему десятичное поле Django сохраняет без .00, даже если у меня decimal_places = 2

Что еще более важно, как я могу сохранить значение 5.00 как 5.00 в Django без использования String.

Ответы [ 2 ]

3 голосов
/ 07 января 2010

Я думаю, что было бы правильнее сказать, что это разные представления одного и того же значения '5'.

Внутренне сохраненное значение (если вы на самом деле не храните строку) равно 5.

Когда отображается значение, т.е. преобразуется в строковое представление для экрана, оно может отображаться как 5, 5.00 или 5.000, но внутри все равно 5

Два десятичных знака не отображаются (если можно так выразиться), пока не будет выведено значение.

Вы не можете сохранить число с двумя десятичными знаками , если не используется строка.

2 голосов
/ 07 января 2010

У вас есть аргумент, что Django должен обеспечивать определенную точность для своих объектов Python, но decimal_places, вероятно, больше о максимальной точности. Я считаю, что точность не хранится в базе данных, поэтому она будет потеряна в любом случае.

В любом случае, если вы хотите обеспечить точность, используйте что-то вроде: Decimal(5).quantize(Decimal(10)**-DECIMAL_PLACES)

Вы можете перегрузить метод to_python в пользовательском django.db.models.DecimalField, чтобы обеспечить возвращение десятичного объекта python с правильной точностью.

...