parse static method

Rational parse(
  1. String source
)

Parses source as a decimal literal and returns its value as Rational.

Implementation

static Rational parse(String source) {
  final match = _pattern.firstMatch(source);
  if (match == null) {
    throw FormatException('$source 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!);
  }
  if (group3 != null) {
    var exponent = int.parse(group3.substring(1));
    if (exponent > 0) {
      numerator *= _i10.pow(exponent);
    }
    if (exponent < 0) {
      denominator *= _i10.pow(exponent.abs());
    }
  }
  return Rational(numerator, denominator);
}