Sto vedendo alcuni strani comportamenti in MySQL relativi alle funzioni create dall'utente. Lo semplificherò il più possibile.Funzione MySQL - risultati di divisione sconosciuti?
mysql> SELECT 1/50
+--------+
| 1/50 |
+--------+
| 0.0200 |
+--------+
1 row in set (0.00 sec)
Fin qui tutto bene. Ora creo una funzione per fare questa divisione e chiamare la funzione:
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)
Molto strano. Ok, proviamo un paio di altri valori:
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)
ho fatto un po 'di più test - ma è abbastanza chiaro dai risultati che il risultato della funzione viene arrotondato a un valore intero, nonostante la funzione viene dichiarata come returns decimal
. Ho provato a sostituire il tipo decimal
con float
ma questo non è cambiato un po '.
Quindi perché si verifica questo arrotondamento e, cosa più importante, come impedirlo?
Ah! Ok, fammi vedere :) –
Cool! era così. –