Thread: jdbc rounding value for numeric fields
Hi Everyone, I have a problem with a prepare statement rounding the numeric fields. I have 2 inserts into a numeric field. The first insert is using an update statement and the second one a prepared statement. It looks like the prepared statement is doing a rounding on the inserted value.... First insert: sql.executeUpdate("insert into jdbc_demo values (2.6999999999999997)"); Postgresql log for the first insert: insert into jdbc_demo values (2.6999999999999997) The value in the database: 2.6999999999999997 Second Insert: PreparedStatement ps = db.prepareStatement("insert into jdbc_demo values (?)"); ps.setDouble(1,2.6999999999999997); ps.executeUpdate(); ps.close(); Postgresql log for the second insert: insert into jdbc_demo values ($1) parameters: $1 = '2.6999999999999997' The value in the database: 2.7 Does anyone know why this is happening and if is a jdbc or postgres issue? Thanks a lot, Ioana Danes __________________________________________________________________ Looking for the perfect gift? Give the gift of Flickr! http://www.flickr.com/gift/
Thank you Tom, My problem could be fixed with BigDecimal... --- On Mon, 5/25/09, Tom Lane <tgl@sss.pgh.pa.us> wrote: > From: Tom Lane <tgl@sss.pgh.pa.us> > Subject: Re: [JDBC] jdbc rounding value for numeric fields > To: "Ioana Danes" <ioanasoftware@yahoo.ca> > Cc: pgsql-jdbc@postgresql.org > Received: Monday, May 25, 2009, 11:15 AM > Ioana Danes <ioanasoftware@yahoo.ca> > writes: > > > ps.setDouble(1,2.6999999999999997); > > Don't use setDouble. float8 to numeric conversion > only preserves > DBL_DIG (ie, 15 on standard platforms) decimal digits, > since that's > the most that can be fully trusted in a float8 value. > > > regards, tom lane > __________________________________________________________________ Looking for the perfect gift? Give the gift of Flickr! http://www.flickr.com/gift/