Потеря точности результатов гибернации при сопоставлении числа (22,21) с BigDecimal

У меня есть этот столбец в моем Oracle 11g, отображаемый как NUMBER (21,20), который отображается в Hibernate как:

@Column(name = "PESO", precision = 21, scale = 20, nullable = false)
public BigDecimal getWeight() {
    return weight;
}

Для конкретной записи, для которой значение столбца составляет 0,493, я получаю BigDecimal со значением 0,49299999999. Кажется, что где-то есть потеря точности из-за (возможно) преобразования Double или Float, но я не мог отследить это с помощью простого модульного теста вроде этого:

Double d = new Double("0.493");
System.out.println((d));

Любой вариант этого кода с использованием Float, BigDecimal и разные конструкторы дают один и тот же результат: «0,493» ... Любой намек на то, как мне сопоставить столбец, чтобы избежать таких проблем? Я использую Hibernate 3.5.6 с аннотациями JPA и Hibernate API (то есть сеансом, а не EntityManager)

5
задан Riccardo Cossu 20 April 2011 в 17:08
поделиться