Money constructor
Implementation
factory Money(double amount, String currency, [int precision = 100000]) {
precision = precision > 100000 ? 100000 : precision;
precision = precision < 10 ? 10 : precision;
List<String> decimals = [];
switch (precision) {
case 10:
decimals = amount.toStringAsFixed(1).split('.');
break;
case 100:
decimals = amount.toStringAsFixed(2).split('.');
break;
case 1000:
decimals = amount.toStringAsFixed(3).split('.');
break;
case 10000:
decimals = amount.toStringAsFixed(4).split('.');
break;
default:
decimals = amount.toStringAsFixed(5).split('.');
break;
}
if (decimals.isEmpty) decimals.addAll(['0', '00000']);
final whole = int.tryParse(decimals.first) ?? 0;
final fractions = int.tryParse(decimals.last) ?? 0;
var fmu = whole * precision;
fmu = amount.isNegative ? fmu + (-fractions) : fmu + fractions;
return Money._(fmu: fmu, currency: currency, precision: precision);
}