Типы данных с фиксированной точкой
Данные типы данных позволяют применять их для хранения денежных значений и обеспечивают предсказуемость операций умножения и деления.
Firebird предлагает два типа данных с фиксированной точкой: NUMERIC
и DECIMAL
.В соответствии со стандартом оба типа ограничивают хранимое число объявленным масштабом (количеством чисел после запятой).При этом подход к тому, как ограничивается точность для типов разный: для столбцов NUMERIC
точность является такой, “какобъявлено”, в то время, как DECIMAL
столбцы могут получать числа, чья точность, по меньшей мере, равна тому, что было объявлено.
Например, NUMERIC(4, 2)
описывает число, состоящее в общей сложности из четырёх цифр, включая 2 цифры после запятой; итого 2 цифры до запятой, 2 после.При записи в столбец с этим типом данных значений 3.1415 в столбце NUMERIC(4, 2)
будет сохранено значение 3,14.
Для данных с фиксированной точкой общим является форма декларации, например NUMERIC(p, s). Здесь важно понять, что в этой записи s
— это масштаб, а не интуитивно предсказываемое “количество знаков после запятой”.Для “визуализации” механизма хранения данных запомните для себя процедуру:
-
При сохранении в базу данных число умножается на 10 (10s), превращаясь в целое;
-
При чтении данных происходит обратное преобразование числа.
Способ физического хранения данных в СУБД зависит от нескольких факторов: декларируемой точности, диалекта базы данных, типа объявления.
Точность | Тип данных | Диалект 1 | Диалект 3 |
---|---|---|---|
1 - 4 |
NUMERIC |
SMALLINT |
SMALLINT |
1 - 4 |
DECIMAL |
INTEGER |
INTEGER |
5 - 9 |
NUMERIC и DECIMAL |
INTEGER |
INTEGER |
10 - 18 |
NUMERIC и DECIMAL |
DOUBLE PRECISION |
BIGINT |
19 - 38 |
NUMERIC и DECIMAL |
INT128 |
INT128 |