У меня есть два @Entity
s, оба с полем BigDecimal
следующим образом:
в одном модуле:
@Entity
@Table(name = "price_range")
public class PriceRange extends AbstractPersistable<Long> {
@Column(name = "price", precision = 19, scale = 4)
private BigDecimal price;
и в другом модуле:
@Entity
@Table(name = "invoice_position")
public class InvoicePosition extends AbstractPersistable<Long> {
@Column(name = "optimized_cost", precision = 19, scale = 4)
private BigDecimal optimizedCost;
обе создают таблицы в моей базе данных с правильными значениями точности и масштаба:
Table invoice_position
======================
id,optimized_cost, ...
----------------------
optimized_cost decimal(19,4)
и
Table price_range
=================
id, price, ...
-----------------
price decimal(19,4)
Тестовый интерфейс корректно сохраняет значения в базу данных.
Однако в модульном тесте один из двух возвращает значение с ошибкой округления:
0.520000000000000017763568394002504646778106689453125
(отладчик говорит: sacle = 51 и точность = 0)
пока другой работает нормально:
0.5200
(отладчик говорит: масштаб = 4, точность = 4)
Оба значения извлекаются из базы данных одинаковым образом (с помощью EntityManager, создающего CriteriaQuery с CriteriaBuilder внутри JpaRepository) :
List<Invoice> invoices = invoiceProvider.findAll();
List<PriceRange> priceRanges = priceRangeProvider.findAll();
В чем здесь может быть проблема? Или лучше: где это может пойти не так, если у сущности есть правильный масштаб и точность, а также база данных?
Я в полном недоумении, где я могу найти ошибку?