Non riesco proprio a capire il DECIMAL di MySQL. Ho bisogno che la riga sia in grado di contenere un numero ovunque da 00.0001 a 99.9999. Come lo strutturerei per funzionare così?
Non riesco proprio a capire il DECIMAL di MySQL. Ho bisogno che la riga sia in grado di contenere un numero ovunque da 00.0001 a 99.9999. Come lo strutturerei per funzionare così?
Risposte:
Le colonne DOUBLE non sono le stesse delle colonne DECIMAL e potresti avere problemi se usi le colonne DOUBLE per i dati finanziari.
DOUBLE è in realtà solo una versione a doppia precisione (64 bit anziché 32 bit) di FLOAT . I numeri in virgola mobile sono rappresentazioni approssimative di numeri reali e non sono esatti. In effetti, numeri semplici come 0.01 non hanno una rappresentazione esatta nei tipi FLOAT o DOUBLE.
Le colonne DECIMAL sono rappresentazioni esatte, ma occupano molto più spazio per un intervallo molto più piccolo di possibili numeri. Per creare una colonna in grado di contenere valori compresi tra 0,0001 e 99,9999 come richiesto, è necessario disporre della seguente istruzione
CREATE TABLE your_table
(
your_column DECIMAL(6,4) NOT NULL
);
La definizione di colonna segue il formato DECIMAL (M, D) dove M è il numero massimo di cifre (la precisione ) e D è il numero di cifre a destra del punto decimale (la scala ).
Ciò significa che il comando precedente crea una colonna che accetta valori compresi tra -99.9999 e 99.9999. È inoltre possibile creare una colonna DECIMALE UNSIGNED, compresa tra 0,0000 e 99,9999.
Per ulteriori informazioni su MySQL DECIMAL, i documenti ufficiali sono sempre un'ottima risorsa.
Tieni presente che tutte queste informazioni sono vere per le versioni di MySQL 5.0.3 e successive. Se si utilizzano versioni precedenti, è necessario aggiornare.
DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]. Restituirà un errore fuori range per valori negativi. Puoi anche creare FLOAT e DOUBLE non firmati. Manuale: dev.mysql.com/doc/refman/5.0/it/numeric-type-overview.html
Anche se le risposte sopra sembrano corrette, basta una semplice spiegazione per darti un'idea di come funziona.
Supponiamo che la tua colonna sia impostata su DECIMAL(13,4). Ciò significa che la colonna avrà una dimensione totale di 13 cifre, di cui 4 verranno utilizzate per la rappresentazione di precisione.
Quindi, in sintesi, per quella colonna avresti un valore massimo di: 999999999.9999
Esistono soluzioni corrette nei commenti, ma per riassumere in un'unica risposta:
Devi usare DECIMAL (6,4).
Quindi puoi avere 6 numero totale di cifre, 2 prima e 4 dopo il punto decimale (la scala). Almeno secondo questo .
MySQL 5.x specifica per tipo di dati decimale è: DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]. La risposta sopra è errata nel dire che i decimali non firmati non sono possibili.
Per definire un campo consentendo solo decimali senza segno, con una lunghezza totale di 6 cifre, di cui 4 decimali, si usa: DECIMAL (6,4) UNSIGNED.
Puoi anche creare tipi di dati FLOAT e DOUBLE non firmati (cioè non negativi).