Уважаемые комрады объясните мне пожалуйста такую вещь: почему запрос `select (-1) / 2 from rdb$database` возвращает 0, а не минус единицу, как это «положено» (практически везде целочисленное деление реализуется именно так) при делении с округлением до целого [(-1)/2] ([x] <= x); почему `select cast((-1) / 2.0 as integer) from rdb$database` возвращает-таки -1? То есть, почему при целочисленном делении используется функция celing, которая округляет свой аргумент до ближайшего целого, которое не меньше аргумента (celing(x) >= x), а при приведении чисел с плавающей точкой к целому используется другая операция округления, а именно floor(x) или [x], которая округляет аргумент до ближайшего целого, которое меньше или равно аргументу ([x] <= x).
В PSQL вообще получается довольно весело, например, есть три переменных типа integer a = 2, b = 3 и c = null: c = (b - 2 * a) / 2; c => 0 c = (b - 2 * a) / 2.0; c => -1 c = a + (b - 2 * a) / 2; c => 2 c = a + (b - 2 * a) / 2.0; c => 2; Насколько я понимаю это или баг, или design flow. Или я не прав? -- SVBEEV -- Feoktistov Andrey.

