Skip to content

Commit

Permalink
feat: add decimalTrailingZeroesToExponent function
Browse files Browse the repository at this point in the history
  • Loading branch information
Ang-dot committed Dec 11, 2023
1 parent cfa851e commit f53df3f
Showing 1 changed file with 28 additions and 8 deletions.
36 changes: 28 additions & 8 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -72,8 +72,22 @@ export function isCrypto(isoCode) {
return isBTCETH(isoCode) || supportedCurrencySymbols[isoCode] == null;
}

// Function to transform decimal trailing zeroes to exponent
function decimalTrailingZeroesToExponent(formattedCurrency, maximumTrailingDecimalZeroes) {
const decimalTrailingZeroesPattern = new RegExp(`\\.(0{${maximumTrailingDecimalZeroes + 1},})(?=[1-9]?)`);

return formattedCurrency.replace(
decimalTrailingZeroesPattern,
(match, decimalTrailingZeroes) => `.0<sub title=${formattedCurrency}>${decimalTrailingZeroes.length}</sub>`,
)
}

// Function to transform the output from Intl.NumberFormat#format
function formatCurrencyOverride(formattedCurrency, locale = "en") {
function formatCurrencyOverride(formattedCurrency, locale = "en", maximumTrailingDecimalZeroes) {
if (typeof maximumTrailingDecimalZeroes !== "undefined") {
formattedCurrency = decimalTrailingZeroesToExponent(formattedCurrency, maximumTrailingDecimalZeroes)
}

// If currency code remains in front
const currencyCodeFrontMatch = formattedCurrency.match(/^[A-Z]{3}\s?/);
if (currencyCodeFrontMatch != null) {
Expand Down Expand Up @@ -277,6 +291,7 @@ export function formatCurrency(
abbreviated = false,
) {
isoCode = isoCode.toUpperCase();
let maximumTrailingDecimalZeroes = undefined;

if (currentISOCode !== isoCode || currentLocale != locale) {
currentISOCode = isoCode;
Expand Down Expand Up @@ -310,10 +325,13 @@ export function formatCurrency(
: amount;
// Round off to number of significant figures without trailing 0's
return `${parseFloat(raw_amount).toPrecision(noDecimal.significantFigures) / 1}`;
} else if (
noDecimal.hasOwnProperty("decimalPlaces") &&
noDecimal.hasOwnProperty("significantFigures")
) {
}

if (noDecimal.hasOwnProperty("maximumTrailingDecimalZeroes")) {
maximumTrailingDecimalZeroes = noDecimal.maximumTrailingDecimalZeroes;
}

if (noDecimal.hasOwnProperty("decimalPlaces") && noDecimal.hasOwnProperty("significantFigures")) {
// Show specified number of significant digits with cutoff of specified fraction digits
const currencyFormatterCustom = generateFormatter(
isoCode,
Expand All @@ -326,9 +344,10 @@ export function formatCurrency(
currencyFormatterCustom.format(
Number.parseFloat(amount.toFixed(noDecimal.decimalPlaces))
),
locale
locale,
maximumTrailingDecimalZeroes
);
} else {
} else if (noDecimal.hasOwnProperty("decimalPlaces") || noDecimal.hasOwnProperty("significantFigures")) {
const currencyFormatterCustom = generateFormatter(
isoCode,
locale,
Expand All @@ -338,7 +357,8 @@ export function formatCurrency(

return formatCurrencyOverride(
currencyFormatterCustom.format(amount),
locale
locale,
maximumTrailingDecimalZeroes
);
}
}
Expand Down

0 comments on commit f53df3f

Please sign in to comment.