fix borrow modal rounding

This commit is contained in:
saml33 2023-01-06 19:49:15 +11:00
parent 079e622624
commit 04c4c5e00d
2 changed files with 39 additions and 24 deletions

View File

@ -21,7 +21,11 @@ import {
INPUT_TOKEN_DEFAULT, INPUT_TOKEN_DEFAULT,
} from './../utils/constants' } from './../utils/constants'
import { notify } from './../utils/notifications' import { notify } from './../utils/notifications'
import { floorToDecimal, formatFixedDecimals } from './../utils/numbers' import {
floorToDecimal,
formatDecimal,
formatFixedDecimals,
} from './../utils/numbers'
import ActionTokenList from './account/ActionTokenList' import ActionTokenList from './account/ActionTokenList'
import ButtonGroup from './forms/ButtonGroup' import ButtonGroup from './forms/ButtonGroup'
import Label from './forms/Label' import Label from './forms/Label'
@ -327,18 +331,25 @@ function BorrowForm({ onSuccess, token }: BorrowFormProps) {
<p className="font-mono text-th-fgd-2"> <p className="font-mono text-th-fgd-2">
{isBorrow ? ( {isBorrow ? (
<> <>
{tokenBalance.toNumber()}{' '} {formatDecimal(
Number(tokenBalance),
bank.mintDecimals
)}{' '}
<span className="text-xs text-th-fgd-3"> <span className="text-xs text-th-fgd-3">
( (
{formatFixedDecimals( {formatFixedDecimals(
bank.uiPrice * tokenBalance.toNumber(), bank.uiPrice * tokenBalance.toNumber(),
true true
)} )}
)
</span> </span>
</> </>
) : inputAmount ? ( ) : inputAmount ? (
<> <>
{inputAmount}{' '} {formatDecimal(
Number(inputAmount),
bank.mintDecimals
)}{' '}
<span className="text-xs text-th-fgd-3"> <span className="text-xs text-th-fgd-3">
( (
{formatFixedDecimals( {formatFixedDecimals(
@ -362,7 +373,10 @@ function BorrowForm({ onSuccess, token }: BorrowFormProps) {
<p className="font-mono text-th-fgd-2"> <p className="font-mono text-th-fgd-2">
{isBorrow ? ( {isBorrow ? (
<> <>
{parseFloat(inputAmount) - tokenBalance.toNumber()}{' '} {formatDecimal(
Number(inputAmount) - Number(tokenBalance),
bank.mintDecimals
)}{' '}
<span className="text-xs text-th-fgd-3"> <span className="text-xs text-th-fgd-3">
( (
{formatFixedDecimals( {formatFixedDecimals(
@ -388,14 +402,20 @@ function BorrowForm({ onSuccess, token }: BorrowFormProps) {
</p> </p>
</Tooltip> </Tooltip>
<p className="font-mono text-th-fgd-2"> <p className="font-mono text-th-fgd-2">
{isBorrow {isBorrow ? (
? formatFixedDecimals( <>
bank.uiPrice * {formatDecimal(
bank.loanOriginationFeeRate.toNumber() * bank.loanOriginationFeeRate.toNumber() *
(parseFloat(inputAmount) - tokenBalance.toNumber()), (parseFloat(inputAmount) - tokenBalance.toNumber()),
true bank.mintDecimals
) )}{' '}
: '$0.00'} <span className="font-body text-th-fgd-3">
{bank.name}
</span>
</>
) : (
'N/A'
)}
</p> </p>
</div> </div>
</div> </div>

View File

@ -59,33 +59,28 @@ const usdFormatter3 = Intl.NumberFormat('en', {
export const formatFixedDecimals = ( export const formatFixedDecimals = (
value: number, value: number,
isCurrency?: boolean, isPrice?: boolean,
isPercentage?: boolean isValue?: boolean
): string => { ): string => {
let formattedValue let formattedValue
if (value === 0) { if (value === 0) {
formattedValue = isCurrency ? '$0.00' : '0' formattedValue = isPrice ? '$0.00' : '0'
} else if (isPercentage) { } else if (isValue) {
formattedValue = Number(floorToDecimal(value, 2)).toLocaleString( formattedValue = usdFormatter2.format(value)
undefined,
{
maximumFractionDigits: 2,
}
)
} else if (Math.abs(value) >= 1000) { } else if (Math.abs(value) >= 1000) {
formattedValue = isCurrency formattedValue = isPrice
? usdFormatter0.format(value) ? usdFormatter0.format(value)
: Number(floorToDecimal(value, 0)).toLocaleString(undefined, { : Number(floorToDecimal(value, 0)).toLocaleString(undefined, {
maximumFractionDigits: 0, maximumFractionDigits: 0,
}) })
} else if (Math.abs(value) >= 0.1) { } else if (Math.abs(value) >= 0.1) {
formattedValue = isCurrency formattedValue = isPrice
? usdFormatter2.format(value) ? usdFormatter2.format(value)
: Number(floorToDecimal(value, 3)).toLocaleString(undefined, { : Number(floorToDecimal(value, 3)).toLocaleString(undefined, {
maximumFractionDigits: 3, maximumFractionDigits: 3,
}) })
} else { } else {
formattedValue = isCurrency formattedValue = isPrice
? usdFormatter3.format(value) ? usdFormatter3.format(value)
: Number(floorToDecimal(value, 8)).toLocaleString(undefined, { : Number(floorToDecimal(value, 8)).toLocaleString(undefined, {
maximumFractionDigits: 8, maximumFractionDigits: 8,