diff --git a/target-service/src/main/java/com/example/targetservice/service/OrderService.java b/target-service/src/main/java/com/example/targetservice/service/OrderService.java index 60e9cf4..2ca0970 100644 --- a/target-service/src/main/java/com/example/targetservice/service/OrderService.java +++ b/target-service/src/main/java/com/example/targetservice/service/OrderService.java @@ -15,8 +15,7 @@ public int calculateUnitPrice(int totalCents, int quantity) { } /** - * Calculates the discounted price for a bulk order. - * BUG: Uses double for intermediate calculation, causing floating-point precision loss. + * Calculates the discounted price for a bulk order using exact decimal arithmetic. */ public BigDecimal calculateDiscountPrice(BigDecimal total, double discountRate, int quantity) { if (quantity <= 0) { @@ -25,7 +24,7 @@ public BigDecimal calculateDiscountPrice(BigDecimal total, double discountRate, if (discountRate <= 0 || discountRate >= 1) { throw new IllegalArgumentException("discountRate must be between 0 and 1, but got: " + discountRate); } - double perItem = total.doubleValue() * discountRate; - return BigDecimal.valueOf(perItem * quantity); + BigDecimal rate = BigDecimal.valueOf(discountRate); + return total.multiply(rate).multiply(BigDecimal.valueOf(quantity)); } }