diff --git a/app/code/Magento/SalesRule/Model/Rule/Action/Discount/ByPercent.php b/app/code/Magento/SalesRule/Model/Rule/Action/Discount/ByPercent.php index 836e1fc8956dc..eed37ecf42207 100644 --- a/app/code/Magento/SalesRule/Model/Rule/Action/Discount/ByPercent.php +++ b/app/code/Magento/SalesRule/Model/Rule/Action/Discount/ByPercent.php @@ -1,7 +1,7 @@ validator->getItemBaseOriginalPrice($item); $_rulePct = $rulePercent / 100; - $discountData->setAmount(($qty * $itemPrice - $item->getDiscountAmount()) * $_rulePct); - $discountData->setBaseAmount(($qty * $baseItemPrice - $item->getBaseDiscountAmount()) * $_rulePct); - $discountData->setOriginalAmount(($qty * $itemOriginalPrice - $item->getDiscountAmount()) * $_rulePct); - $discountData->setBaseOriginalAmount( - ($qty * $baseItemOriginalPrice - $item->getBaseDiscountAmount()) * $_rulePct - ); + + $amount = ($qty * $itemPrice - $item->getDiscountAmount()) * $_rulePct; + $baseAmount = ($qty * $baseItemPrice - $item->getBaseDiscountAmount()) * $_rulePct; + $originalAmount = ($qty * $itemOriginalPrice - $item->getDiscountAmount()) * $_rulePct; + $baseOriginalAmount = ($qty * $baseItemOriginalPrice - $item->getBaseDiscountAmount()) * $_rulePct; + + $discountData->setAmount(round(floatval((string) $amount), 2)); + $discountData->setBaseAmount(round(floatval((string) $baseAmount), 2)); + $discountData->setOriginalAmount(round(floatval((string) $originalAmount), 2)); + $discountData->setBaseOriginalAmount(round(floatval((string) $baseOriginalAmount), 2)); if (!$rule->getDiscountQty() || $rule->getDiscountQty() >= $qty) { $discountPercent = min(100, $item->getDiscountPercent() + $rulePercent); diff --git a/app/code/Magento/SalesRule/Test/Unit/Model/Rule/Action/Discount/ToPercentTest.php b/app/code/Magento/SalesRule/Test/Unit/Model/Rule/Action/Discount/ToPercentTest.php index 8b710cf46d63c..e28ff6b93770c 100644 --- a/app/code/Magento/SalesRule/Test/Unit/Model/Rule/Action/Discount/ToPercentTest.php +++ b/app/code/Magento/SalesRule/Test/Unit/Model/Rule/Action/Discount/ToPercentTest.php @@ -1,7 +1,7 @@ 100, 'expectedDiscountData' => [ 'amount' => 98, - 'baseAmount' => 59.49999999999999, - 'originalAmount' => 118.99999999999999, + 'baseAmount' => 59.50, + 'originalAmount' => 119, 'baseOriginalAmount' => 80.5, ], ] diff --git a/dev/tests/integration/testsuite/Magento/SalesRule/Model/Rule/Action/Discount/CartFixedTest.php b/dev/tests/integration/testsuite/Magento/SalesRule/Model/Rule/Action/Discount/CartFixedTest.php index 145e86b35d62c..9724ba7ecfd64 100644 --- a/dev/tests/integration/testsuite/Magento/SalesRule/Model/Rule/Action/Discount/CartFixedTest.php +++ b/dev/tests/integration/testsuite/Magento/SalesRule/Model/Rule/Action/Discount/CartFixedTest.php @@ -535,7 +535,7 @@ public static function discountByPercentDataProvider() ], [ 'percentDiscount' => 50, - 'expectedDiscounts' => ['simple1' => 5.72, 'simple2' => 15.27, 'totalDiscount' => -20.99] + 'expectedDiscounts' => ['simple1' => 5.72, 'simple2' => 15.28, 'totalDiscount' => -21] ], [ 'percentDiscount' => 100,