parse static method
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);
}