Я вижу странное поведение в MySQL, связанное с создаваемыми пользователем функциями. Я упрощу это, насколько это возможно.Функция MySQL - странные результаты разделения?
mysql> SELECT 1/50
+--------+
| 1/50 |
+--------+
| 0.0200 |
+--------+
1 row in set (0.00 sec)
Пока все хорошо. Теперь я создаю функцию для этого деления и вызываю функцию:
mysql> delimiter $$
mysql> create function myd(var decimal) returns decimal language sql deterministic
-> begin
-> declare res decimal;
-> set res = var/50;
->
-> return res;
-> end
-> $$
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;
mysql> select myd(1);
+--------+
| myd(1) |
+--------+
| 0 |
+--------+
1 row in set (0.00 sec)
Очень странно. Хорошо, давайте попробуем несколько других значений:
mysql> select myd(10), myd(20), myd(50), myd(70), myd(100);
+---------+---------+---------+---------+----------+
| myd(10) | myd(20) | myd(50) | myd(70) | myd(100) |
+---------+---------+---------+---------+----------+
| 0 | 0 | 1 | 1 | 2 |
+---------+---------+---------+---------+----------+
1 row in set (0.00 sec)
я сделал немного больше тестирования - но это довольно ясно из результатов, что результат функции округляется до целого значения, несмотря на то, функция объявляется в returns decimal
. Я попытался заменить тип decimal
на float
, но это немного изменилось.
Так почему это округление происходит и, что более важно, как я могу его предотвратить?
Ах! Хорошо, дайте мне посмотреть :) –
Прохладный! вот и все. –