Tôi có cột này trong Oracle 11g tôi ánh xạ như NUMBER (21,20), được ánh xạ trong Hibernate như:Hibernate mất độ chính xác trong kết quả khi ánh xạ một số (22,21) để BigDecimal
@Column(name = "PESO", precision = 21, scale = 20, nullable = false)
public BigDecimal getWeight() {
return weight;
}
Đối với một bản ghi cụ thể mà giá trị của cột là 0,493 tôi nhận được một BigDecimal có giá trị là 0,49299999999. Dường như đâu đó có một mất độ chính xác do (có thể) cho một đôi hoặc Float chuyển đổi, nhưng tôi không thể theo dõi nó xuống với một thử nghiệm đơn vị đơn giản như thế này:
Double d = new Double("0.493");
System.out.println((d));
Bất kỳ biến thể của mã mà , sử dụng Float, BigDecimal và các hàm tạo khác nhau cho kết quả tương tự: "0,493" ... Bất kỳ gợi ý nào về cách ánh xạ cột để tránh các vấn đề như vậy? Tôi đang sử dụng Hibernate 3.5.6, với chú thích JPA và Hibernate API (có nghĩa là phiên và không EntityManager)
có vẻ như đây không phải là lỗi ngủ đông ... Điều này hoàn toàn trên SquirrelSql, hiển thị 0,493 với giá trị 0,49299999999 ... Giá trị luôn là, cả trong tệp "nguồn", cả trong cơ sở dữ liệu , như SqlDeveloper báo cáo. –