Rational.parse constructor

Rational.parse(
  1. String decimalValue
)

Implementation

factory Rational.parse(String decimalValue) {
  final match = _pattern.firstMatch(decimalValue);
  if (match == null) {
    throw FormatException('$decimalValue is not a valid format');
  }
  final group1 = match.group(1);
  final group2 = match.group(2);
  final group3 = match.group(3);

  var numerator = _i0;
  var denominator = _i1;
  if (group2 != null) {
    for (var i = 1; i < group2.length; i++) {
      denominator = denominator * _i10;
    }
    numerator = BigInt.parse('$group1${group2.substring(1)}');
  } else {
    numerator = BigInt.parse(group1 ?? '0');
  }
  if (group3 != null) {
    var exponent = BigInt.parse(group3.substring(1));
    while (exponent > _i0) {
      numerator = numerator * _i10;
      exponent -= _i1;
    }
    while (exponent < _i0) {
      denominator = denominator * _i10;
      exponent += _i1;
    }
  }
  return Rational(numerator, denominator);
}