회계용 괄호를 사용하여 음수 통화 금액을 어떻게 포맷팅하나요?
음수 통화 값을 회계 표기법으로 표시하려면 currencySign 옵션을 사용하세요
소개
재무제표, 회계 보고서 및 대차대조표는 마이너스 기호 대신 괄호를 사용하여 음수 통화 금액을 표시합니다. 500달러의 손실은 -$500.00 대신 ($500.00)로 표시됩니다. 이 관행은 음수 금액을 시각적으로 더 뚜렷하게 만들고, 손실을 간과할 위험을 줄이며, 확립된 회계 표준을 따릅니다.
JavaScript의 Intl.NumberFormat API는 이러한 회계 표기법으로 음수 통화 금액을 형식화하기 위한 currencySign 옵션을 제공합니다. currencySign을 "accounting"으로 설정하면 음수 값이 로케일 규칙에 따라 자동으로 괄호 안에 표시됩니다.
회계 표기법이 괄호를 사용하는 이유
음수 금액을 괄호로 감싸는 관행은 컴퓨터가 회계에 일반적으로 사용되기 전에 시작되었습니다. 종이에 인쇄된 마이너스 기호는 숫자 열을 스캔할 때 작거나, 희미하거나, 쉽게 놓칠 수 있었습니다. 괄호는 음수 값 주위에 명확한 시각적 경계를 만들어 즉시 인식할 수 있게 합니다.
괄호는 또한 다른 맥락에서 나타나는 하이픈이나 대시와의 혼동을 방지합니다. 많은 행과 열이 있는 복잡한 재무 표에서 괄호는 단일 마이너스 기호 문자보다 더 눈에 띕니다. 이러한 시각적 구분은 재무 데이터를 읽거나, 옮기거나, 분석할 때 오류를 방지하는 데 도움이 됩니다.
이 관행은 회계에서 표준 관행이 되었으며 오늘날에도 널리 사용됩니다. 대부분의 회계 소프트웨어, 재무 보고서 및 대차대조표는 음수 금액을 괄호로 표시합니다. 재무 문서에 익숙한 사용자들은 이 형식을 기대하며 마이너스 기호보다 읽기 쉽다고 생각합니다.
currencySign 회계 형식 사용하기
통화 형식을 지정할 때 Intl.NumberFormat 인스턴스를 생성할 때 currencySign 옵션에 "accounting" 값을 전달합니다. 이는 포맷터에게 음수 금액에 회계 표기법을 사용하도록 지시합니다.
const formatter = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD',
currencySign: 'accounting'
});
console.log(formatter.format(-1234.56));
// 출력: "($1,234.56)"
console.log(formatter.format(1234.56));
// 출력: "$1,234.56"
음수 금액은 마이너스 기호 없이 괄호로 감싸져 표시됩니다. 양수 금액은 괄호 없이 정상적으로 표시됩니다. 포맷터는 값이 양수인지 음수인지에 따라 적절한 회계 표기법을 자동으로 적용합니다.
currencySign 옵션은 통화 형식 지정에만 영향을 미칩니다. 이 옵션이 적용되려면 style: 'currency'를 설정하고 currency 코드를 제공해야 합니다.
표준 형식과 회계 형식 비교
기본 통화 형식은 음수 값에 마이너스 기호를 사용합니다. 이 표준 형식은 일반적인 목적에 적합하며, 회계 형식은 재무 보고 관행을 따릅니다.
const standard = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD',
currencySign: 'standard'
});
const accounting = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD',
currencySign: 'accounting'
});
console.log(standard.format(-500));
// 출력: "-$500.00"
console.log(accounting.format(-500));
// 출력: "($500.00)"
표준 형식은 통화 기호 앞에 마이너스 기호를 배치합니다. 회계 형식은 통화 기호를 포함한 전체 금액을 괄호로 묶습니다. 두 형식 모두 양수 값에 대해서는 동일한 출력을 생성합니다.
currencySign 옵션을 생략하면 포맷터는 기본적으로 "standard" 동작을 사용합니다.
const formatter = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD'
});
console.log(formatter.format(-500));
// 출력: "-$500.00"
로케일에 따라 다양한 회계 표기법
다양한 로케일은 현지 관행에 따라 통화 기호와 괄호를 다른 위치에 배치합니다. Intl.NumberFormat API는 이러한 변형을 자동으로 처리합니다.
const currencies = [
{ locale: 'en-US', currency: 'USD' },
{ locale: 'de-DE', currency: 'EUR' },
{ locale: 'fr-FR', currency: 'EUR' },
{ locale: 'ja-JP', currency: 'JPY' }
];
currencies.forEach(({ locale, currency }) => {
const formatter = new Intl.NumberFormat(locale, {
style: 'currency',
currency: currency,
currencySign: 'accounting'
});
console.log(`${locale}: ${formatter.format(-1234.56)}`);
});
// 출력:
// en-US: ($1,234.56)
// de-DE: (-1.234,56 €)
// fr-FR: (1 234,56 €)
// ja-JP: (¥-1,235)
각 로케일은 통화 기호 배치, 소수점 구분 기호, 천 단위 구분 기호 및 괄호 사용에 대한 해당 지역의 관행에 따라 음수 금액을 형식화합니다. 이러한 관행을 알거나 수동으로 구현할 필요가 없습니다. API는 로케일 식별자를 기반으로 올바른 형식을 적용합니다.
일부 로케일은 괄호 안에 숫자 근처에 마이너스 기호를 배치합니다. 다른 로케일은 통화 기호 근처에 배치합니다. 포맷터는 로케일별 규칙에 따라 이러한 세부 사항을 처리합니다.
회계 표기법과 부호 표시 옵션 결합하기
'currencySign' 옵션은 'signDisplay' 옵션과 함께 작동하여 통화 형식에서 부호가 어떻게 표시될지 제어합니다. 이 조합을 통해 양수 및 음수 금액 표시를 세밀하게 제어할 수 있습니다.
const always = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD',
currencySign: 'accounting',
signDisplay: 'always'
});
console.log(always.format(500));
// 출력: "+$500.00"
console.log(always.format(-500));
// 출력: "($500.00)"
signDisplay: 'always'를 사용하면 양수 금액은 플러스 기호와 함께 표시되고 음수 금액은 여전히 괄호를 사용합니다. 이렇게 하면 이익과 손실 모두 명시적으로 표시됩니다.
const never = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD',
currencySign: 'accounting',
signDisplay: 'never'
});
console.log(never.format(500));
// 출력: "$500.00"
console.log(never.format(-500));
// 출력: "$500.00"
signDisplay: 'never'를 사용하면 양수와 음수 금액 모두 부호나 괄호 없이 동일하게 표시됩니다. 이는 값이 양수인지 음수인지에 관계없이 크기만 보여줍니다.
const exceptZero = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD',
currencySign: 'accounting',
signDisplay: 'exceptZero'
});
console.log(exceptZero.format(500));
// 출력: "+$500.00"
console.log(exceptZero.format(-500));
// 출력: "($500.00)"
console.log(exceptZero.format(0));
// 출력: "$0.00"
signDisplay: 'exceptZero'를 사용하면 양수 금액은 플러스 기호를 표시하고, 음수 금액은 괄호를 사용하며, 0은 부호 없이 표시됩니다. 이 형식은 변화를 강조하면서 0을 중립적으로 유지하고자 하는 손익 계산서에 적합합니다.
회계 형식을 사용해야 하는 경우
사용자가 회계 관행을 기대하는 상황에서 재무 데이터를 표시할 때 회계 형식을 사용하세요. 여기에는 재무제표, 대차대조표, 손익계산서, 수익 및 손실 보고서, 회계 소프트웨어 인터페이스가 포함됩니다.
회계 형식은 표준 형식보다 음수 금액을 더 두드러지게 만듭니다. 괄호는 손실, 부채 또는 마이너스 잔액에 주의를 끄는 시각적 경계를 만듭니다. 이는 사용자가 재무 데이터를 검토할 때 문제 영역을 빠르게 식별하는 데 도움이 됩니다.
const accountingFormatter = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD',
currencySign: 'accounting'
});
const accounts = [
{ name: 'Cash', balance: 15000 },
{ name: 'Accounts Receivable', balance: -3500 },
{ name: 'Inventory', balance: 12000 },
{ name: 'Accounts Payable', balance: -8000 }
];
accounts.forEach(account => {
const formatted = accountingFormatter.format(account.balance);
console.log(`${account.name}: ${formatted}`);
});
// 출력:
// Cash: $15,000.00
// Accounts Receivable: ($3,500.00)
// Inventory: $12,000.00
// Accounts Payable: ($8,000.00)
괄호는 음수 잔액을 두드러지게 만들어 사용자가 한눈에 음수 값을 가진 계정을 식별하는 데 도움이 됩니다.
일반 전자상거래, 소비자 대상 인터페이스 또는 회계 관행이 적용되지 않는 상황에서는 표준 형식을 사용하세요. 회계 및 금융 외부의 대부분의 사용자는 괄호 표기법에 익숙하지 않으며 음수 금액에 마이너스 기호가 표시되기를 기대합니다.
const standardFormatter = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD'
});
// 쇼핑 카트 또는 환불의 경우:
console.log(standardFormatter.format(-25.50));
// 출력: "-$25.50"
대상 사용자가 재무 보고 관행을 기대하는 경우 회계 형식을 선택하세요. 대상 사용자가 소비자 지향적인 표시를 기대하는 경우 표준 형식을 선택하세요. 사용자의 기대와 숫자가 표시되는 상황에 맞는 형식을 선택하세요.
회계 형식에 대한 브라우저 지원
currencySign: "accounting" 옵션은 모든 최신 브라우저에서 지원됩니다. Chrome, Edge, Firefox, Safari 및 해당 모바일 버전은 모두 2019년 이후 출시된 버전에서 이 기능을 지원합니다.
구형 브라우저를 지원해야 하는 경우, 이 기능을 테스트하고 대체 방안을 제공하세요.
function formatCurrency(amount) {
try {
const formatter = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD',
currencySign: 'accounting'
});
return formatter.format(amount);
} catch (error) {
// Fallback for browsers without accounting support
const formatter = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD'
});
return formatter.format(amount);
}
}
이 대체 방안은 회계 형식이 지원되지 않을 경우 표준 통화 형식을 반환합니다. 실제로는 회계 형식 지원이 충분히 보편화되어 있어, 최신 브라우저만 지원하는 애플리케이션에서는 이러한 대체 방안이 거의 필요하지 않습니다.