From d0676a7403f3994f680142b2faf2c5e1f37b6642 Mon Sep 17 00:00:00 2001 From: deibudei Date: Wed, 6 May 2026 14:13:11 +0800 Subject: [PATCH] =?UTF-8?q?fix(repair):=20=E4=BF=AE=E5=A4=8D=20OrderServic?= =?UTF-8?q?e.calculateDiscountPrice=20=E7=9A=84=20double=20=E7=B2=BE?= =?UTF-8?q?=E5=BA=A6=E4=B8=A2=E5=A4=B1=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/example/targetservice/service/OrderService.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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..eb97492 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 @@ -16,7 +16,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. + * Uses BigDecimal arithmetic to avoid floating-point precision loss. */ public BigDecimal calculateDiscountPrice(BigDecimal total, double discountRate, int quantity) { if (quantity <= 0) { @@ -25,7 +25,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 discountRateBD = BigDecimal.valueOf(discountRate); + return total.multiply(discountRateBD).multiply(BigDecimal.valueOf(quantity)); } }