..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!

 

 

 

 

 

 

….maledetto MySQL – parte seconda!!!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *