[ http://issues.apache.org/jira/browse/DERBY-123?page=history ]
Satheesh Bandaram resolved DERBY-123:
-------------------------------------
Resolution: Fixed
Fix Version: 10.1.0.0
Committed this patch for Shreyas Kaushik. ([EMAIL PROTECTED])
> Derby incorrectly rounds double values down during insert into NUMERIC
> ----------------------------------------------------------------------
>
> Key: DERBY-123
> URL: http://issues.apache.org/jira/browse/DERBY-123
> Project: Derby
> Type: Bug
> Components: SQL
> Versions: 10.0.2.1
> Environment: Linux JDK 1.4.2
> Reporter: Geoff Soutter
> Fix For: 10.1.0.0
>
> When inserting a double value into a field defined as NUMERIC(a,b) using
> PreparedStatement.setDouble(), Derby may incorrectly round the number down.
> For example, a NUMERIC(5,2) field with a double = 4.64 ends up with a value
> of 4.63 in the database. This works fine in Oracle and other databases.
> The problem occurs because double cannot represent 4.64 exactly, so the
> actual value is 4.6399999... SQLDecimal.setCoreValue uses BigDecimal(double)
> which constructs a BigDecimal of 4.6399999... and then SQLDecimal.setWidth
> uses value.setScale(desiredScale, BigDecimal.ROUND_DOWN); Note that
> BigDecimal javadoc recommends that the double constructor be avoided for this
> reason.
> One fix appears to be to change SQLDecimal.setCoreValue(double) to avoid
> using the double constructor of BigDecimal. Using Double.toString() and
> BigDecimal(String) looks as if it would work as expected, because
> Double.toString() has "special rounding abilities" and converts 4.639999...
> back to 4.64.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
If you want more information on JIRA, or have a bug to report see:
http://www.atlassian.com/software/jira