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/
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