Money constructor

Money(
  1. double amount,
  2. String currency, [
  3. int precision = 100000
])

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