formatCoin static method
String
formatCoin(
- dynamic amount, {
- String symbol = '',
- int? decimalDigits = 2,
- bool leftSymbol = false,
- bool useUnitSuffix = false,
})
Implementation
static String formatCoin(
dynamic amount, {
String symbol = '',
int? decimalDigits = 2,
bool leftSymbol = false,
bool useUnitSuffix = false, // Thêm parameter để bật/tắt việc sử dụng B,M,K
}) {
if (amount is String) {
try {
amount = double.parse(amount);
} catch (e) {
amount = 0;
}
}
double numAmount = amount.toDouble();
String suffix = '';
if (useUnitSuffix && numAmount != 0) {
if (numAmount.abs() >= 1e12) {
numAmount /= 1e12;
suffix = 'T';
} else if (numAmount.abs() >= 1e9) {
numAmount /= 1e9;
suffix = 'B';
} else if (numAmount.abs() >= 1e6) {
numAmount /= 1e6;
suffix = 'M';
} else if (numAmount.abs() >= 1e3) {
numAmount /= 1e3;
suffix = 'K';
} else if (numAmount.abs() < 1 && numAmount.abs() > 0) {
if (numAmount.abs() >= 1e-3) {
numAmount *= 1e3;
suffix = 'm';
} else if (numAmount.abs() >= 1e-6) {
numAmount *= 1e6;
suffix = 'μ';
} else if (numAmount.abs() >= 1e-9) {
numAmount *= 1e9;
suffix = 'n';
}
}
}
// Xác định số chữ số thập phân
if (numAmount == 0) {
decimalDigits = 0;
} else if (suffix.isEmpty) {
if (numAmount.abs() < 100) {
decimalDigits = decimalDigits ?? 6;
}
} else {
// Với các suffix, điều chỉnh số chữ số thập phân theo giá trị
if (numAmount.abs() >= 100) {
decimalDigits = 1;
} else if (numAmount.abs() >= 10) {
decimalDigits = 2;
} else {
decimalDigits = 3;
}
}
var formatLargeCoin = NumberFormat.currency(
locale: 'en_US',
symbol: symbol,
decimalDigits: decimalDigits,
customPattern: leftSymbol ? '\u00a4 #,###' : '#,### \u00a4',
);
String formatted = formatLargeCoin.format(numAmount);
formatted = removeUnnecessaryZeros(formatted, symbol, leftSymbol);
// Thêm số 0 phía trước nếu bắt đầu bằng dấu chấm
if (formatted.startsWith('.')) {
formatted = '0$formatted';
}
if (formatted.startsWith('-.')) {
formatted = formatted.replaceFirst('-.', '-0.');
}
// Thêm suffix vào kết quả
if (suffix.isNotEmpty) {
if (symbol.isEmpty) {
formatted = '$formatted$suffix';
} else {
formatted = formatted.replaceAll(symbol, '').trim();
formatted = leftSymbol
? '$symbol $formatted$suffix'
: '$formatted$suffix $symbol';
}
}
return formatted;
}