From a1336a367cf2c21f1275625a2452573d729c6495 Mon Sep 17 00:00:00 2001 From: IlyaDoronin Date: Fri, 12 Apr 2024 17:42:25 +0300 Subject: [PATCH] fix: payment --- package.json | 1 + src/pages/Payment/Payment.tsx | 16 ++++++++++------ yarn.lock | 5 +++++ 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 00bfcdb..edb3a95 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "husky": "^8.0.3", "immer": "^10.0.2", "isomorphic-fetch": "^3.0.0", + "js-big-decimal": "^2.0.7", "notistack": "^3.0.1", "pdfjs-dist": "3.6.172", "react": "^18.2.0", diff --git a/src/pages/Payment/Payment.tsx b/src/pages/Payment/Payment.tsx index bb0ff91..ca07f88 100644 --- a/src/pages/Payment/Payment.tsx +++ b/src/pages/Payment/Payment.tsx @@ -1,3 +1,4 @@ +import bigDecimal from "js-big-decimal"; import SectionWrapper from "@components/SectionWrapper"; import ArrowBackIcon from "@mui/icons-material/ArrowBack"; import { @@ -50,9 +51,6 @@ const paymentMethods: PaymentMethod[] = [ type PaymentMethodType = (typeof paymentMethods)[number]["name"]; -// Нужно, что бы избежать ошибок по типу (3 * 1.2 = 3.5999999999999996) -const SAFE_VALUE = 0.0001; - export default function Payment() { const theme = useTheme(); const upMd = useMediaQuery(theme.breakpoints.up("md")); @@ -76,7 +74,9 @@ export default function Payment() { (location.state?.notEnoughMoneyAmount as number) ?? 0; console.log("notEnoughMoneyAmount ", paymentValueField); - const paymentValue = parseFloat(paymentValueField) * 100; + const paymentValue = parseFloat( + bigDecimal.multiply(parseFloat(paymentValueField), 100) + ); useLayoutEffect(() => { console.log("notEnoughMoneyAmount ", notEnoughMoneyAmount); @@ -108,7 +108,11 @@ export default function Payment() { fromSquiz, body: { type: selectedPaymentMethod, - amount: Math.trunc(Number(paymentValueField) * 100 + SAFE_VALUE), + amount: Number( + bigDecimal.floor( + bigDecimal.multiply(Number(paymentValueField), 100) + ) + ), }, paymentPurpose: notEnoughMoneyAmount ? "paycart" : "replenishwallet", }); @@ -288,7 +292,7 @@ export default function Payment() { }} > {currencyFormatter.format( - Math.trunc(paymentValue + SAFE_VALUE) / 100 + Number(bigDecimal.divide(bigDecimal.floor(paymentValue), 100)) )} ) : ( diff --git a/yarn.lock b/yarn.lock index 4c5f2da..c059c4a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8292,6 +8292,11 @@ jiti@^1.19.1: resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.0.tgz#7c97f8fe045724e136a397f7340475244156105d" integrity sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q== +js-big-decimal@^2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/js-big-decimal/-/js-big-decimal-2.0.7.tgz#fb9b44b4c1eae08903cb191c0cf37b82f3a8d7c4" + integrity sha512-XGc79t2Iv3b7LFlYaTT8WoQBuWL4K81aST+dq2YGHV6giedbnoG0s33ju24Uw/BGqLYfPPgn4HGRrPS2mfKk3Q== + "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"