format static method
String
format(
- dynamic amount,
- CurrencyFormat settings, {
- bool compact = false,
- int decimal = 2,
- dynamic showThousandSeparator = true,
- dynamic enforceDecimals = false,
Format amount
using the settings
of a currency.
If compact
is true
the compact form will be used. e.g. '$ 1.23K'
instead of '$ 1,230'
.
decimal
is the number of decimal places used when rounding.
e.g. '$ 45.5'
(1 decimal place), '$ 45.52'
(2 decimal places).
If showThousandSeparator
is set to false
, the thousand separator won't be shown.
e.g. '$ 1200'
instead of '$ 1,200'
.
If enforceDecimals
is set to true
, decimals will be shown even if it is an integer.
e.g. '$ 5.00'
instead of '$ 5'
.
Implementation
static String format(
amount,
CurrencyFormat settings, {
bool compact = false,
int decimal = 2,
showThousandSeparator = true,
enforceDecimals = false,
}) {
amount = double.parse('$amount');
late String number;
String letter = '';
if (compact) {
for (int i = 0; i < _letters.length; i++) {
if (amount.abs() >= _letters.keys.elementAt(i)) {
letter = _letters.values.elementAt(i);
amount /= _letters.keys.elementAt(i);
break;
}
}
number = amount.toStringAsPrecision(3);
number = number.replaceAll('.', settings.decimalSeparator);
} else {
number = amount.toStringAsFixed(decimal);
if (!enforceDecimals &&
double.parse(number) == double.parse(number).round()) {
number = double.parse(number).round().toString();
}
number = number.replaceAll('.', settings.decimalSeparator);
if (showThousandSeparator) {
String oldNum = number.split(settings.decimalSeparator)[0];
number = number.contains(settings.decimalSeparator)
? settings.decimalSeparator +
number.split(settings.decimalSeparator)[1]
: '';
for (int i = 0; i < oldNum.length; i++) {
number = oldNum[oldNum.length - i - 1] + number;
if ((i + 1) % 3 == 0 &&
i < oldNum.length - (oldNum.startsWith('-') ? 2 : 1)) {
number = settings.thousandSeparator + number;
}
}
}
}
switch (settings.symbolSide) {
case SymbolSide.left:
return '${settings.symbol}${settings.symbolSeparator}$number$letter';
case SymbolSide.right:
return '$number$letter${settings.symbolSeparator}${settings.symbol}';
default:
return '$number$letter';
}
}