会計における負の通貨金額を括弧で表示する方法

currencySignオプションを使用して、負の通貨値を会計表記で表示する

はじめに

財務諸表、会計報告書、貸借対照表では、負の通貨金額はマイナス記号ではなく括弧で表示されます。500ドルの損失は、-$500.00ではなく($500.00)と表示されます。この慣例により、負の金額がより視覚的に区別しやすくなり、損失を見落とすリスクが軽減され、確立された会計基準に従うことができます。

JavaScriptのIntl.NumberFormat APIは、負の通貨金額をこの会計表記で表示するためのcurrencySignオプションを提供しています。currencySign"accounting"に設定すると、負の値はロケールの規則に従って自動的に括弧で表示されます。

会計表記が括弧を使用する理由

負の金額を括弧で囲む慣習は、コンピュータが会計で一般的になる前に始まりました。紙に印刷されたマイナス記号は小さく、薄く、数字の列をスキャンする際に見落とされやすい可能性がありました。括弧は負の値の周りに明確な視覚的境界を作り、すぐに認識できるようにします。

括弧はまた、他の文脈で表示されるハイフンやダッシュとの混同を防ぎます。多くの行と列を持つ密集した財務表では、括弧は単一のマイナス記号文字よりも目立ちます。この視覚的な区別は、財務データを読み取り、転記、または分析する際のエラーを防ぐのに役立ちます。

この慣例は会計における標準的な慣行となり、今日でも広く使用されています。ほとんどの会計ソフトウェア、財務報告書、貸借対照表は、負の金額を括弧で表示します。財務文書に精通しているユーザーは、この形式を期待しており、マイナス記号よりも読みやすいと感じています。

currencySign accounting形式の使用

通貨フォーマットのIntl.NumberFormatインスタンスを作成する際に、currencySignオプションに"accounting"の値を渡します。これにより、フォーマッターは負の金額に会計表記を使用するようになります。

const formatter = new Intl.NumberFormat('en-US', {
  style: 'currency',
  currency: 'USD',
  currencySign: 'accounting'
});

console.log(formatter.format(-1234.56));
// Output: "($1,234.56)"

console.log(formatter.format(1234.56));
// Output: "$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));
// Output: "-$500.00"

console.log(accounting.format(-500));
// Output: "($500.00)"

標準形式は通貨記号の前にマイナス記号を配置します。会計形式は通貨記号を含む金額全体を括弧で囲みます。どちらの形式も正の値に対しては同じ出力を生成します。

currencySignオプションを省略すると、フォーマッターはデフォルトで"standard"の動作になります。

const formatter = new Intl.NumberFormat('en-US', {
  style: 'currency',
  currency: 'USD'
});

console.log(formatter.format(-500));
// Output: "-$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)}`);
});

// Output:
// 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));
// Output: "+$500.00"

console.log(always.format(-500));
// Output: "($500.00)"

signDisplay: 'always'を使用すると、正の金額はプラス記号付きで表示され、負の金額は引き続き括弧を使用します。これにより、利益と損失の両方が明示的になります。

const never = new Intl.NumberFormat('en-US', {
  style: 'currency',
  currency: 'USD',
  currencySign: 'accounting',
  signDisplay: 'never'
});

console.log(never.format(500));
// Output: "$500.00"

console.log(never.format(-500));
// Output: "$500.00"

signDisplay: 'never'を使用すると、正の金額と負の金額の両方が、符号や括弧なしで同じように表示されます。これにより、値が正か負かに関係なく、大きさのみが表示されます。

const exceptZero = new Intl.NumberFormat('en-US', {
  style: 'currency',
  currency: 'USD',
  currencySign: 'accounting',
  signDisplay: 'exceptZero'
});

console.log(exceptZero.format(500));
// Output: "+$500.00"

console.log(exceptZero.format(-500));
// Output: "($500.00)"

console.log(exceptZero.format(0));
// Output: "$0.00"

signDisplay: 'exceptZero'を使用すると、正の金額はプラス記号を表示し、負の金額は括弧を使用し、ゼロは符号なしで表示されます。このフォーマットは、変化を強調しながらゼロを中立に保ちたい損益計算書に適しています。

会計フォーマットを使用する場合

ユーザーが会計規則を期待するコンテキストで財務データを表示する場合は、会計フォーマットを使用します。これには、財務諸表、貸借対照表、損益計算書、損益レポート、会計ソフトウェアインターフェースが含まれます。

会計フォーマットは、標準フォーマットよりも負の金額を目立たせます。括弧は、損失、負債、またはマイナス残高に注意を引く視覚的な境界を作成します。これにより、ユーザーは財務データをスキャンする際に問題領域を素早く特定できます。

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}`);
});

// Output:
// Cash: $15,000.00
// Accounts Receivable: ($3,500.00)
// Inventory: $12,000.00
// Accounts Payable: ($8,000.00)

括弧により、マイナス残高が目立ち、ユーザーは一目でマイナス値のアカウントを識別できます。

一般的なeコマース、消費者向けインターフェース、または会計規則が適用されない文脈では、標準形式を使用してください。会計や財務以外のほとんどのユーザーは括弧表記にあまり馴染みがなく、負の金額にはマイナス記号が表示されることを期待しています。

const standardFormatter = new Intl.NumberFormat('en-US', {
  style: 'currency',
  currency: 'USD'
});

// For a shopping cart or refund:
console.log(standardFormatter.format(-25.50));
// Output: "-$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);
  }
}

このフォールバックは、会計形式が利用できない場合に標準通貨形式を返します。実際には、会計形式のサポートは十分に普及しているため、モダンブラウザのみをサポートするアプリケーションでは、このフォールバックが必要になることはほとんどありません。