Postgres e colonna REAL

mercoledì 27 luglio 2011 - 18.27
Tag Elenco Tags  Windows 7  |  Windows XP  |  MySQL 4.1  |  Office 2007  |  Office 2003  |  Chrome  |  Firefox  |  Javascript  |  CSS 2.1  |  HTML 4.01

emaborsa Profilo | Newbie

Ciao a tutti,
ho un problemino con la gestione dei prezzi per il mio programma in Java.
In Java uso double, per inserirli in database ho creato delle colonne REAL. All'inserimento non ho problemi, ma all'estrazione, non sono come dovrebbero. Se per esempio inserisco 6.6, al ritorno ho 6.5999999.
Perchè?
Come faccio a risolvere?

lbenaglia Profilo | Guru

>In Java uso double, per inserirli in database ho creato delle
>colonne REAL. All'inserimento non ho problemi, ma all'estrazione,
>non sono come dovrebbero. Se per esempio inserisco 6.6, al ritorno
>ho 6.5999999.
>Perchè?
Perché Double e Real sono data type approssimati per definizione e sono utilizzati ad esempio in ambito scientifico, pertanto non ti garantiscono la precisione che cerchi.

>Come faccio a risolvere?
Per la gestione degli importi dovresti utilizzare un data type a precisione fissa come ad esempio Numeric oppure datatype pensati per gestire nativamente questa tipologia di dati come money:
http://www.postgresql.org/docs/9.0/static/datatype.html

Per quanto riguarda Java leggo che la documentazione ufficiale suggerisce di utilizzare java.math.BigDecimal:
http://download.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
http://download.oracle.com/javase/7/docs/api/java/math/BigDecimal.html

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/

emaborsa Profilo | Newbie

Ma in Java non ho problemi, usando double fino ad ora è sempre stato preciso, anche se devo ammettere che non ho mai usato più di due posizioni decimali.

Riguardo Postgres, ho appena provato a modificare da REAL a DECIMAL, e sembra essere ok. Essendo abbastanza nuovo riguardo database, non ero a conoscenza di tale tipo. Grazie.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5