Quali sono le migliori pratiche nell'utilizzo del tipo di dati in denaro nell'applicazione Java? Il denaro dovrebbe essere in doppia variabile? Che dire di arrotondamenti, valute e così via. Sono librerie speciali per questo? E che dire di ORM e SQL nei database più popolari. Come so non in tutti i motori SQL è il tipo di dati di denaro. In tal caso, è necessario utilizzare NUMERIC(15,2)
, DECIMAL(15,2)
o il tipo di dati REAL?Come utilizzare il tipo di dati in denaro in Java, SQL, ORM
risposta
Quali sono le migliori pratiche nell'utilizzo del tipo di dati in denaro nell'applicazione Java?
Utilizzare BigDecimal. L'utilizzo di qualsiasi primitiva corrisponderà a prima o poi a problemi di precisione.
E che dire di ORM e SQL nei database più diffusi.
Hibernate (e probabilmente tutti gli altri) può gestire perfettamente BigDecimal. E si traduce nel tipo di database appropriato, che di solito è DECIMALE.
È necessario utilizzare BigDecimal
per rappresentare i valori monetari.
Da Bloch, J., Effective Java, 2a ed, Articolo 48:
Il
float
edouble
tipi sono particolarmente poco adatti per monetarie calcoli perché è impossibile rappresentare 0.1 (o qualsiasi altra potenza negativa di 10 ) comefloat
odouble
esattamente.Ad esempio, supponiamo di avere $ 1,03 e di spendere 42c. Quanti soldi hai ti sei lasciato?
System.out.println(1.03 - .42);
stampe fuori
0.6100000000000001
.Il modo giusto per risolvere questo problema è da usare
BigDecimal
,int
olong
per i calcoli monetari.
Per SQL, utilizzo NUMERIC(19,2)
.
Nei cerchi di sviluppo, è comunemente considerata la migliore procedura per utilizzare BigDecimal in cambio di denaro in Java. Questo non vuol dire che è sempre meglio che usare il doppio IMHO, ma ti suggerisco di iniziare con BigDecimal.
Per SQL, suggerisco di utilizzare un tipo corrispondente NUMERIC o DECIMAL per BigDecimal e REAL per il doppio.
Vale la pena notare che tutte le banche di investimento e le case di trading che ho lavorato per l'uso raddoppiano con arrotondamento per denaro (in C++ e Java). Al contrario non ho mai visto BigDecimal usato, ma ho visto NUMERIC usato nei database. A fini contabili usa BigDecimal.
- 1. Come utilizzare il tipo di dati lunghi in Java?
- 2. Come si converte da un tipo di dati in denaro nel server SQL?
- 3. Quale tipo di dati dovrei utilizzare per rappresentare denaro in C#?
- 4. come è possibile utilizzare il tipo di dati GUID in SQL Server 2008?
- 5. Come archiviare denaro in elasticsearch
- 6. Come modellare una somma di denaro in Java
- 7. Utilizzare un'istruzione LIKE su SQL Server. Tipo di dati XML
- 8. Quale tipo di dati Java corrisponde al tipo di dati SQL Oracle NUMERIC?
- 9. Utilizzare un tipo di dati condivisa come DataContract in WCF
- 10. Perchè uscita differisce in C e Java nell'espressione m ++ + (++ m)
- 11. Come utilizzare annotazioni di tipo personalizzato in Java
- 12. java tipo di dati byte
- 13. Quale tipo di dati del server sql rappresenta meglio un doppio in C#?
- 14. Come convertire il tipo di stringa in tipo di classe in java
- 15. Come utilizzare l'istruzione SQL IN in fsharp.data.sqlclient?
- 16. Che tipo mapperesti BigDecimal in Java/Hibernate in MySQL?
- 17. Direttiva di formattazione del denaro in Angular
- 18. Come formattare datetime come M/D/YYYY in SQL Server?
- 19. Come implementare la relazione n: m in Java?
- 20. SQL Azure supporta il tipo di dati FILESTREAM
- 21. possiamo avere dati di tipo array in sql server 2008
- 22. Come utilizzare il tipo di costruzione in forma infissa
- 23. Perché non esiste un tipo di dati AtomicBooleanArray in Java?
- 24. Analizza il tipo di dati in Mathematica?
- 25. Formato numero denaro
- 26. Struttura il tipo di dati in php?
- 27. Tipo di dati per System.Version in sql server
- 28. Tipo di dati XML in SQL Server 2008 Query
- 29. Come si modifica il tipo di dati di una colonna in MS SQL?
- 30. Formato di denaro PHP in valuta indiana?
Quindi ti depositi i centesimi? – Spider
No, il grande decimale contiene informazioni su dove si trova il separatore.Si traduce in un decimale regolare nel DB. Inoltre, solo la memorizzazione dei centesimi è una soluzione complicata: mentre potrebbe avere senso per alcune monete con solo 2 cifre decimali, ci sono alcune monete che contiene 3 cifre decimali, alcuni che hanno 2 o 3 cifre decimali, e alcuni hanno nessuna. Per non parlare del fatto che alcune cose hanno un prezzo di 3 cifre, anche se la valuta ha solo 2 cifre di frazione. – jpkrohling