currency_formatter
お金のフォーマットを簡単にできるパッケージです。カスタム通貨シンボルやフォーマットを設定でき、主要通貨の組み込みフォーマットの一部を使用するか、システムのものを使うことができます。
お金のフォーマットを簡単にできるパッケージです。カスタム通貨シンボルやフォーマットを設定でき、主要通貨の組み込みフォーマットの一部を使用するか、システムのものを使うことができます。
以下は英語原文のスナップショットです。最新版は GitHub をご覧ください。
A package to easily format money. It supports setting a custom currency symbol and format, using some of the inbuilt ones for the main currencies or using the system one.
To set how a double will be formatted, create a CurrencyFormat:
CurrencyFormat euroSettings = CurrencyFormat(
code: 'eur',
symbol: '€',
symbolSide: SymbolSide.left,
thousandSeparator: '.',
decimalSeparator: ',',
symbolSeparator: ' ',
);
symbolSide can be set to SymbolSide.left, SymbolSide.right, or SymbolSide.none.thousandSeparator and decimalSeparator default to '.', ',' or ',','.' automatically depending on symbolSide.negativeSignPlacement can be set to NegativeSignPlacement.beforeSymbol or NegativeSignPlacement.afterSymbol, and defaults to NegativeSignPlacement.afterSymbol.To format a num, CurrencyFormatter.format() is used:
num amount = 1910.9347;
String formatted = CurrencyFormatter.format(amount, euroSettings); // 1.910,93 €
String compact = CurrencyFormatter.format(amount, euroSettings, compact: true); // 1,91K €
String threeDecimal = CurrencyFormatter.format(amount, euroSettings, decimal: 3); // 1.910,945 €
To get a num from a formatted String, use CurrencyFormatter.parse():
// Above's example continuation
num parseFormatted = CurrencyFormatter.parse(formatted, euroSettings); // 1910.93
num parseCompact = CurrencyFormatter.parse(compact, euroSettings); // 1910.0
num parseThreeDecimal = CurrencyFormatter.parse(threeDecimal, euroSettings); // 1910.935
CurrencyFormatsPredefined settings for many currencies are also included in this package.
They are listed in the CurrencyFormatter.majorsList list and defined as static constants in the CurrencyFormat class.
String inUSD = CurrencyFormatter.format(amount, CurrencyFormat.usd); // $ 1,910.93
String inRUB = CurrencyFormatter.format(amount, CurrencyFormatter.fromCode('rub')!); // 1.910,93 ₽
String jpySymbol = CurrencyFormatter.jpy.symbol; // ¥
CurrencyFormatIn Flutter, you can get the default CurrencyFormat according to the device
language using CurrencyFormat.local:
String inSystemCurrency = CurrencyFormatter.format(amount, CurrencyFormat.local ?? CurrencyFormat.usd);
If instead you want to get the CurrencyFormat for a specific locale, use CurrencyFormat.fromLocale():
String inLocaleCurrency = CurrencyFormatter.format(amount, CurrencyFormat.fromLocale('en_US')!);
CurrencyFormat from symbol or codeYou can get a CurrencyFormat from a currency symbol (if it is in
CurrencyFormatter.majors) with CurrencyFormat.fromSymbol():
String fromSymbol = CurrencyFormatter.format(amount, CurrencyFormat.fromSymbol('£')!); // £ 1,910.35
String fromCode = CurrencyFormatter.format(amount, CurrencyFormat.fromCode('gbp')!); // £ 1,910.35
Let's say you want to use the following custom currency seamlessly:
CurrencyFormat khr = CurrencyFormat(
symbol: '៛',
symbolSide: SymbolSide.right,
);
You can create your own majors list:
const List<CurrencyFormat> myCurrencies = [
...CurrencyFormatter.majorsList,
khr,
];
And use it to get the currency corresponding to a symbol or code, or the local one:
CurrencyFormat.fromSymbol('៛', myCurrencies); // khr
CurrencyFormat.fromCode('khr', myCurrencies); // khr
// custom local currency
CurrencyFormat? localCurrency() =>
CurrencyFormat.fromSymbol(CurrencyFormat.localSymbol, myCurrencies);
// or
CurrencyFormat? localCurrency() =>
CurrencyFormat.fromLocale(null, myCurrencies);