Главная страница Случайная лекция Мы поможем в написании ваших работ! Порталы: БиологияВойнаГеографияИнформатикаИскусствоИсторияКультураЛингвистикаМатематикаМедицинаОхрана трудаПолитикаПравоПсихологияРелигияТехникаФизикаФилософияЭкономика Мы поможем в написании ваших работ! |
Типы с фиксированной точкой
Firebird предоставляет два типа данных чисел с фиксированной точкой NUMERIC и DECIMAL. Каждый тип объявляется как TYPE (P, S), где Р определяет точность (количество значащих цифр), а S – масштаб (количество цифр справа от символа десятичной точки). Типы NUMERIC и DECIMAL, как они реализованы в FIREBIRD, являются идентичными, за исключением случая, когда точность меньше пяти. NUMERIC не соответствует стандарту SQL-92. FIREBIRD хранит масштабированное число как тип SMALLINT (16 бит), INTEGER (32 бита) или BIGINT (64 бита) в соответствии с объявленным масштабом (размером точности). Его объявленная точность сохраняется вместе с объявленным масштабом в виде отрицательного множителя масштаба, представляющего степень числа 10. Когда к числу происходит обращение для вывода или для расчётов, оно получается произведением хранимого целого на 10 множитель масштаба. Например, для столбца, объявленного как NUMERI (4, 3), FIREBIRD сохраняет число в виде SMALLINT. Если вы вводите число 7.2345, FIREBIRD без сообщения округляет самую правую цифру (4) и сохраняет 16-битовое целое 7235 и множитель масштаба -3. Это число будет найдено как 7.235 (7235*10-3). Числа в формате NUMERIC с точностью меньше 5 хранятся как SMALLINT (16 разрядов). Числа в формате DECIMAL с точностью меньше 5 хранятся как INTEGER (32 разряда). Кроме того, числа в Диалекте 1 с точностью 10 – 18 хранятся как DOUBLE PRECISION, а в Диалекте 3 – как BIGINT. При выполнении деления типов с фиксированной точкой диалекты 1 и 3 ведут себя по-разному. В Диалекте 3, когда оба операнда при операции деления являются типами с фиксированной точкой, FIREBIRD суммирует масштабы обоих операндов для определения масштаба результата (частного). В Диалекте 1 деление всегда создаёт частное типа DOUBLE PRECISION. Примеры. В диалекте 3 частное от деления DECIMAL (12.3) на DECIMAL (9,2) будет DECIMAL (18,5). (Масштабы суммируются.) 11223344.556 / 1234567.89 = 9.09090 В диалекте 1 первое число трактуется как число DOUBLE PRECISION (точность 12). Частное тоже имеет тип DOUBLE PRECISION. Результат 9.09090917308727 (по причине ошибок, присущих типам с плавающей точкой).
Следующие операции деления в Диалекте 3 дают различные результаты: 1 / 3.00 = 0.33 типа NUMERIC (18, 2) потому что сумма масштабов равна 0+2 = 2 типа типа Integer Numeric (18,2) 1.00 / 3.00 = 0, 3333 типа NUMERIC (18, 4) потому что сумма масштабов равна 2+2 = 4 NUMERIC(18,2)
При выполнении умножения операндов с фиксированной точкой масштаб результата равен сумме масштабов операндов. 12.12 123.123 результат имеет масштаб 5 (2+3) NUMERIC(9,2) NUMERIC(9,3) = 1492.25076 В Диалекте 3 точность умножения чисел с фиксированной точкой будет равна 18. В Диалекте 4 если точность результата равна > 9, то результатом будет DOUBLE PRECISION. При сложении и вычитании масштаб результата равен максимальному масштабу операндов. 12.12 + 123.123 = 135.243 будет иметь масштаб 3, а 12.12 – 123.123 = – 111.003
В Диалекте 3 результат любого сложения или вычитания имеет тип NUMERIC(18, n). В Диалекте 1 он имеет тип (9, n), где n – максимальный масштаб операнда.
Дата добавления: 2014-02-28; просмотров: 405; Нарушение авторских прав Мы поможем в написании ваших работ! |