2010-01-06 2 views
0

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

?

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

+2

Какой двигатель базы данных? SQLite - особый случай. Все значения SQLite являются строками. –

ответ

3

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

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

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

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

Вы не сохранить номер с 2 знаков после запятой если вы используете строку.

+0

Вы также можете сохранить «100 × value» как int –

2

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^