2012-06-08 17 views
12

Questa domanda è stata posta molte volte in precedenza, ma ho trovato opinioni contrastanti sull'argomento, quindi ho pensato di riportarlo nuovamente nella speranza di una conclusione più unificata.Memorizzazione dei valori di valuta nel database MySQL

Desidero memorizzare un valore di valuta nel mio database. Supponiamo che tutte le voci siano dello stesso tipo di valuta (ad esempio USD) e che siano consentiti valori sia positivi sia negativi.

Il mio pensiero iniziale sarebbe quello di memorizzare il valore come numero intero con segno in termini di unità più piccola della valuta associata. Ad esempio, se voglio memorizzare il valore $ 1,25, inserisco 125 nel database, poiché l'unità più piccola di USD è $ 0,01. La cosa bella di questo metodo è che MySQL andrà automaticamente al numero intero più vicino. Ad esempio, se il valore in dollari è $ 1,29, potrei inserire 125.9, che verrebbe automaticamente arrotondato e memorizzato come 126 o $ 1,26.

Quindi, cosa ne pensi? È un approccio sano o esiste un modo migliore?

+1

'DECIMAL (p, s)' http://dev.mysql.com/doc/refman/5.5/en/fixed-point-types.html – DavidO

+0

Ah, che rende molto più senso. Quindi non è necessario dividere per 100 prima di visualizzare il numero. Grazie! –

risposta

13

I dati finanziari possono essere memorizzati come DECIMAL(p,s) dove p è il numero di cifre significative e s è la scala (numero di posti a destra del punto decimale). Vedi The MySQL documentation.

anche da O'Reilly di High Performance MySQL, capitolo 3:

"... si dovrebbe usare DECIMAL solo quando è necessario risultati esatti per numeri frazionari - per esempio, quando la memorizzazione di dati finanziari."

Da Learning MySQL O'Reilly:

DECIMAL è, "... Un tipo numerico comunemente usato memorizza un punto fisso numero come stipendio o distanza ...."

E MySQL Pocket Reference:

DECIMAL" ... Sto res i numeri a virgola mobile in cui la precisione è critica , ad esempio per i valori monetari. "

2

Non c'è niente di sbagliato nell'approccio che descrivi. Non c'è giusto o sbagliato quando si tratta di questa domanda.

È necessario tenere presente che per visualizzare un valore $ all'utente, è necessario eseguire sempre un'operazione di divisione o un tipo di formattazione.

È più semplice eseguire il debug di formule/calcoli se tutto è in centesimi o in dollari? Visualizzerai i valori in centesimi o in dollari? ecc.

Mantenerlo semplice, ma in entrambi i casi è necessario utilizzare un decimale.

+1

In realtà se hai bisogno di precisione, non puoi memorizzarlo come int, perché perderai i valori frazionari, che sono necessari per cose come le tasse governative. – Alan

Problemi correlati