Что ж, одна из проблем с плавающей запятой заключается в том, что они обычно не могут представлять множество десятичных значений.Например, 0.3
не может быть представлен точно.
С другой стороны, есть Python типа с именем Decimal
, который не работает со спецификациями IEEE-754 с плавающей запятой.Но, отформатировав его как поток десятичных цифр.В результате он может правильно представлять десятичные числа и правильно выполнять вычисления (но ему будет сложно хранить числа в компактном виде).
Поскольку базы данных обычно также используют такое представлениеТаким образом, Django использует Decimal
для предотвращения потери данных при чтении или записи в базу данных.Это Decimal
содержит точность и печатает числа типа 50
с их точностью (поэтому 50.00
).
Однако Django стремится принимать все виды числовых значений, включая int
s, float
s и т. д. В этом случае значения преобразуются в десятичное представление при записи их в базу данных.
Таким образом, в случае, если вы, например, присваиваете int
атрибуту экземпляра модели, тогдаэтот атрибут будет иметь тип int
(ну, в основном это способ, которым вы назначаете атрибут для объекта Python).Если вы затем сохраните его в базе данных, Django будет сериализовать его как десятичное число, и оно будет сохранено в базе данных.Если вы позже извлечете модель, у вас в памяти будет модель с атрибутом as Decimal
, которая хранит число с указанной точностью.