mirror of
https://github.com/mayswind/ezbookkeeping.git
synced 2026-05-18 08:44:25 +08:00
display amounts according to currency decimals number count
This commit is contained in:
@@ -2,6 +2,16 @@ import currencyConstants from '@/consts/currency.js';
|
||||
|
||||
import { isString, isNumber } from './common.js';
|
||||
|
||||
export function getCurrencyFraction(currencyCode) {
|
||||
const currencyInfo = currencyConstants.all[currencyCode];
|
||||
|
||||
if (currencyInfo) {
|
||||
return currencyInfo.fraction;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
export function appendCurrencySymbol(value, currencyDisplayType, currencyCode, currencyUnit, currencyName, isPlural) {
|
||||
if (isNumber(value)) {
|
||||
value = value.toString();
|
||||
|
||||
+7
-5
@@ -50,6 +50,7 @@ import {
|
||||
} from './numeral.js';
|
||||
|
||||
import {
|
||||
getCurrencyFraction,
|
||||
appendCurrencySymbol,
|
||||
getAmountPrependAndAppendCurrencySymbol
|
||||
} from './currency.js';
|
||||
@@ -936,9 +937,10 @@ function getCurrentDigitGroupingType(translateFn, digitGrouping) {
|
||||
return digitGroupingType.type;
|
||||
}
|
||||
|
||||
function getNumberFormatOptions(translateFn, userStore) {
|
||||
function getNumberFormatOptions(translateFn, userStore, currencyCode) {
|
||||
return {
|
||||
decimalSeparator: getCurrentDecimalSeparator(translateFn, userStore.currentUserDecimalSeparator),
|
||||
decimalNumberCount: getCurrencyFraction(currencyCode),
|
||||
digitGroupingSymbol: getCurrentDigitGroupingSymbol(translateFn, userStore.currentUserDigitGroupingSymbol),
|
||||
digitGrouping: getCurrentDigitGroupingType(translateFn, userStore.currentUserDigitGrouping),
|
||||
};
|
||||
@@ -954,8 +956,8 @@ function getParsedAmountNumber(value, translateFn, userStore) {
|
||||
return parseAmount(value, numberFormatOptions);
|
||||
}
|
||||
|
||||
function getFormattedAmount(value, translateFn, userStore) {
|
||||
const numberFormatOptions = getNumberFormatOptions(translateFn, userStore);
|
||||
function getFormattedAmount(value, translateFn, userStore, currencyCode) {
|
||||
const numberFormatOptions = getNumberFormatOptions(translateFn, userStore, currencyCode);
|
||||
return formatAmount(value, numberFormatOptions);
|
||||
}
|
||||
|
||||
@@ -986,7 +988,7 @@ function getFormattedAmountWithCurrency(value, currencyCode, translateFn, userSt
|
||||
const isPlural = value !== '100' && value !== '-100';
|
||||
|
||||
if (!notConvertValue) {
|
||||
const numberFormatOptions = getNumberFormatOptions(translateFn, userStore);
|
||||
const numberFormatOptions = getNumberFormatOptions(translateFn, userStore, currencyCode);
|
||||
const hasIncompleteFlag = isString(value) && value.charAt(value.length - 1) === '+';
|
||||
|
||||
if (hasIncompleteFlag) {
|
||||
@@ -1739,7 +1741,7 @@ export function i18nFunctions(i18nGlobal) {
|
||||
getCurrentDigitGroupingType: (userStore) => getCurrentDigitGroupingType(i18nGlobal.t, userStore.currentUserDigitGrouping),
|
||||
appendDigitGroupingSymbol: (userStore, value) => getNumberWithDigitGroupingSymbol(value, i18nGlobal.t, userStore),
|
||||
parseAmount: (userStore, value) => getParsedAmountNumber(value, i18nGlobal.t, userStore),
|
||||
formatAmount: (userStore, value) => getFormattedAmount(value, i18nGlobal.t, userStore),
|
||||
formatAmount: (userStore, value, currencyCode) => getFormattedAmount(value, i18nGlobal.t, userStore, currencyCode),
|
||||
formatAmountWithCurrency: (settingsStore, userStore, value, currencyCode) => getFormattedAmountWithCurrency(value, currencyCode, i18nGlobal.t, userStore, settingsStore),
|
||||
formatExchangeRateAmount: (userStore, value) => getFormattedExchangeRateAmount(value, i18nGlobal.t, userStore),
|
||||
getAdaptiveAmountRate: (userStore, amount1, amount2, fromExchangeRate, toExchangeRate) => getAdaptiveAmountRate(amount1, amount2, fromExchangeRate, toExchangeRate, i18nGlobal.t, userStore),
|
||||
|
||||
@@ -146,6 +146,11 @@ export function formatAmount(value, options) {
|
||||
}
|
||||
|
||||
const decimalSeparator = options.decimalSeparator || numeralConstants.defaultDecimalSeparator.symbol;
|
||||
let decimalNumberCount = options.decimalNumberCount;
|
||||
|
||||
if (!isNumber(decimalNumberCount) || decimalNumberCount > numeralConstants.maxSupportedDecimalNumberCount) {
|
||||
decimalNumberCount = numeralConstants.defaultDecimalNumberCount;
|
||||
}
|
||||
|
||||
let integer = '0';
|
||||
let decimals = '00';
|
||||
@@ -159,6 +164,18 @@ export function formatAmount(value, options) {
|
||||
decimals = '0' + value;
|
||||
}
|
||||
|
||||
if (decimalNumberCount === 0) {
|
||||
if (decimals === '00') {
|
||||
decimals = '';
|
||||
} else if (decimals.charAt(1) === '0') {
|
||||
decimals = decimals.charAt(0);
|
||||
}
|
||||
} else if (decimalNumberCount === 1) {
|
||||
if (decimals.charAt(1) === '0') {
|
||||
decimals = decimals.charAt(0);
|
||||
}
|
||||
}
|
||||
|
||||
if (options.trimTailZero) {
|
||||
if (decimals.charAt(0) === '0' && decimals.charAt(1) === '0') {
|
||||
decimals = '';
|
||||
@@ -194,6 +211,16 @@ export function formatPercent(value, precision, lowPrecisionValue) {
|
||||
return result + '%';
|
||||
}
|
||||
|
||||
export function getAmountWithDecimalNumberCount(amount, decimalNumberCount) {
|
||||
if (decimalNumberCount === 0) {
|
||||
return Math.floor(amount / 100) * 100;
|
||||
} else if (decimalNumberCount === 1) {
|
||||
return Math.floor(amount / 10) * 10;
|
||||
}
|
||||
|
||||
return amount;
|
||||
}
|
||||
|
||||
export function formatExchangeRateAmount(exchangeRateAmount, options) {
|
||||
if (!options) {
|
||||
options = {};
|
||||
|
||||
Reference in New Issue
Block a user