From 33693e0ca813d5a5bf60b2b05685fedda37d5af2 Mon Sep 17 00:00:00 2001 From: deibudei Date: Wed, 6 May 2026 00:17:27 +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=20BigDecimal=20=E7=B2=BE?= =?UTF-8?q?=E5=BA=A6=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- target-service/files/welcome.txt | 1 + .../com/example/targetservice/service/OrderService.java | 7 ++++--- 2 files changed, 5 insertions(+), 3 deletions(-) create mode 100644 target-service/files/welcome.txt diff --git a/target-service/files/welcome.txt b/target-service/files/welcome.txt new file mode 100644 index 0000000..13d6eec --- /dev/null +++ b/target-service/files/welcome.txt @@ -0,0 +1 @@ +hello from storage \ No newline at end of file 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..7826ef5 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 throughout to avoid floating-point precision loss. */ public BigDecimal calculateDiscountPrice(BigDecimal total, double discountRate, int quantity) { if (quantity <= 0) { @@ -25,7 +25,8 @@ 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); + BigDecimal quantityBD = BigDecimal.valueOf(quantity); + return total.multiply(discountRateBD).multiply(quantityBD); } }