Thread: jdbc rounding value for numeric fields

jdbc rounding value for numeric fields

From
Ioana Danes
Date:
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/


Re: jdbc rounding value for numeric fields

From
Tom Lane
Date:
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