Percent constructor

Percent(
  1. double amount, [
  2. int precision = 100
])

Implementation

factory Percent(double amount, [int precision = 100]) {
  precision = precision > 1000 ? 1000 : precision;
  precision = precision < 100 ? 100 : 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 Percent._(fmu: fmu, precision: precision);
}