pstanton
pstanton

Reputation: 36640

Hibernate is rounding my double?

I've got a double which I'm trying to save to a postgres numeric column.

The value I'm trying to save is 151.33160591125488, and I've verified that this is in fact the argument being received by Hibernates internals pre-insert.

However the value in the database post insert is 151.331605911255, ie it's been rounded to 12dp.

I know my column is of the right scale, as it's an unrestricted numeric column and the following...

update tbl set col=151.33160591125488

...has the desired effect.

So the culprit has to be either Hibernate or the postgres-JDBC driver.

Ideas?

EDIT:

org.hibernate.dialect.PostgreSQLDialect:

registerColumnType( Types.DOUBLE, "float8" );

and

select cast (151.33160591125488 as float8);

=151.331605911255

therefore the default behavior for double is incorrect, as it doesn't always save the double supplied to it.

Does anyone know how to get hibernate to use the column type "numeric" in postgres?

Upvotes: 3

Views: 10257

Answers (2)

TheGuyNextDoor
TheGuyNextDoor

Reputation: 7937

Whenever precision matters use java.math.BigDecimal. This answer discusses this in great detail.

Upvotes: 3

ChssPly76
ChssPly76

Reputation: 100706

Java double is not really appropriate for precise math operations. Use BigDecimal instead. Hibernate supports it as one of basic types:

<property name="amount" type="big_decimal" />

Upvotes: 2

Related Questions