diff --git a/src/shared/components/TokenAmountInput.tsx b/src/shared/components/TokenAmountInput.tsx
index d1f671f29..ddd035ef9 100644
--- a/src/shared/components/TokenAmountInput.tsx
+++ b/src/shared/components/TokenAmountInput.tsx
@@ -71,7 +71,9 @@ export default function TokenAmountInput({
{label && (
{`${label} ${bigIntToDisplayUserAmount(
- balance
+ balance,
+ 18,
+ 5
)} ${symbol}`}
)}
{
event.preventDefault()
- onChange(bigIntToUserAmount(balance))
+ onChange(bigIntToUserAmount(balance, 18, 18))
}}
>
Max
diff --git a/src/shared/utils/numbers.ts b/src/shared/utils/numbers.ts
index 19fa568fa..58982830d 100644
--- a/src/shared/utils/numbers.ts
+++ b/src/shared/utils/numbers.ts
@@ -4,10 +4,15 @@ import { FixedPointNumber } from "shared/types/stake"
const FLOATING_POINT_REGEX = /^[^0-9]*([0-9,]+)(?:\.([0-9]*))?$/
export const separateThousandsByComma = (
- value: number | bigint | string
+ value: number | bigint | string,
+ decimals = 2
): string => {
const adjustedValue = typeof value === "string" ? +value : value
- return adjustedValue.toLocaleString("en-US", { maximumFractionDigits: 2 })
+ return adjustedValue.toLocaleString("en-US", {
+ // @ts-expect-error - `maximumFractionDigits` wants to get number less than 21,
+ // but as the tokens have 18 decimals have, we can safely pass a parameter
+ maximumFractionDigits: decimals < 21 ? decimals : 2,
+ })
}
function parseToFixedPointNumber(
@@ -81,7 +86,7 @@ export function bigIntToUserAmount(
desiredDecimals = 2
): string {
const desiredDecimalsAmount =
- amount / 10n ** BigInt(Math.max(1, decimals - desiredDecimals))
+ amount / 10n ** BigInt(Math.max(0, decimals - desiredDecimals))
return (
Number(desiredDecimalsAmount) /
@@ -98,6 +103,7 @@ export function bigIntToDisplayUserAmount(
const amountBigInt = typeof amount === "string" ? BigInt(amount) : amount
return separateThousandsByComma(
- bigIntToUserAmount(amountBigInt, decimals, desiredDecimals)
+ bigIntToUserAmount(amountBigInt, decimals, desiredDecimals),
+ desiredDecimals
)
}