From 12670683af749d782bb256ee5a9a525b5d27034f Mon Sep 17 00:00:00 2001 From: "Carlos R. L. Rodrigues" <37986729+carlos-r-l-rodrigues@users.noreply.github.com> Date: Sun, 25 Aug 2024 05:44:51 -0300 Subject: [PATCH] fix(payment-stripe): fix rounding (#8753) --- .../src/utils/__tests__/get-smallest-unit.ts | 5 ++++- .../payment-stripe/src/utils/get-smallest-unit.ts | 8 ++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/packages/modules/providers/payment-stripe/src/utils/__tests__/get-smallest-unit.ts b/packages/modules/providers/payment-stripe/src/utils/__tests__/get-smallest-unit.ts index 824755e003..b193cb8e9c 100644 --- a/packages/modules/providers/payment-stripe/src/utils/__tests__/get-smallest-unit.ts +++ b/packages/modules/providers/payment-stripe/src/utils/__tests__/get-smallest-unit.ts @@ -9,10 +9,13 @@ describe("getSmallestUnit", () => { expect(getSmallestUnit(5.124, "KWD")).toBe(5130) // 2 decimals + expect(getSmallestUnit(2.675, "USD")).toBe(268) + expect(getSmallestUnit(100.54, "USD")).toBe(10054) expect(getSmallestUnit(5.126, "KWD")).toBe(5130) expect(getSmallestUnit(0.54, "USD")).toBe(54) expect(getSmallestUnit(0.054, "USD")).toBe(5) - expect(getSmallestUnit(0.005104, "USD")).toBe(0) + expect(getSmallestUnit(0.005104, "USD")).toBe(1) + expect(getSmallestUnit(0.004104, "USD")).toBe(0) }) }) diff --git a/packages/modules/providers/payment-stripe/src/utils/get-smallest-unit.ts b/packages/modules/providers/payment-stripe/src/utils/get-smallest-unit.ts index 89de8068b4..339876f74e 100644 --- a/packages/modules/providers/payment-stripe/src/utils/get-smallest-unit.ts +++ b/packages/modules/providers/payment-stripe/src/utils/get-smallest-unit.ts @@ -47,10 +47,14 @@ export function getSmallestUnit( currency: string ): number { const multiplier = getCurrencyMultiplier(currency) - const smallestAmount = new BigNumber(MathBN.mult(amount, multiplier)) + + let amount_ = + Math.round(new BigNumber(MathBN.mult(amount, multiplier)).numeric) / + multiplier + + const smallestAmount = new BigNumber(MathBN.mult(amount_, multiplier)) let numeric = smallestAmount.numeric - // Check if the currency requires rounding to the nearest ten if (multiplier === 1e3) { numeric = Math.ceil(numeric / 10) * 10