..e niente, tanto ormai si sa che lo detesto! (anche se continua a darmi la possibilità di donare soldi alla banca.. leggasi pagare il mutuo).
Qualcuno potrebbe chiedersi che cosa ha combinato questa vota per farmi innervosire?
E’ presto detto : come altri software (vedi qui) ha problemi a gestire gli arrotondamenti!
Vediamo il caso specifico:
Abbiamo una tabella di nome “tabella” composta da due campi: id (auto incrementale) e valore (float).
Alla riga con id = 1 corrisponde il valore 3.135 che mi serve approssimato alla seconda cifra. Nessun problema usiamo la funzione round e siamo a posto, no?
SELECT ROUND(valore, 2) AS valore_arrotondato FROM tabella WHERE tabella.id = 1;
Che risultato vi aspettaye? 3.14 ? scherzate vero? vi darà un bel 3.13
…..
Il perché è abbastanza ovvio: il tipo float usato per il campo valore non ha una precisione sufficiente per fornire un risultato attendibile. Si può risolvere usando il tipo DECIMAL (ve lo consiglio per tutti i campi che prevedono valori in virgola mobile).
Dichiarando il campo come DECIMAL(10,4) la query vista sopra fornirà il risultato atteso di 3.14.
A questo link trovate ulteriori informazioni.
Eh sono cose che si imparano con l’esperienza… è un tuo errore…. basta farci caso…. UN GRANDISSIMO STO C@@ZO!!
Per esempio : la stessa tabella, con valore di tipo float, se interrogata con la medesima query in PostgreSQL ci torna un bel errore e ci dice che la funzione non esiste per quel tipo di dato! Impostando la tipologia di dato prevista (nel caso di PostgreSQL è numeric) il tutto funziona correttamente.
Noterete che PostgreSQL, al contrario diM(erd)ySQL, non ci lascia fare potenziali c@zz@te!
Mi fermo qua… il Natale è prossimo!