XPathDecimal.parse constructor

XPathDecimal.parse(
  1. String text
)

Implementation

factory parse(String text) {
  final trimmed = text.trim();
  if (trimmed.contains('e') || trimmed.contains('E')) {
    final parts = trimmed.split(RegExp(r'[eE]'));
    final mantissa = XPathDecimal.parse(parts[0]);
    final exp = int.parse(parts[1]);
    final newScale = mantissa.scale - exp;
    if (newScale >= 0) {
      return XPathDecimal(mantissa.unscaledValue, newScale);
    } else {
      return XPathDecimal(mantissa.unscaledValue * _ten.pow(-newScale), 0);
    }
  }
  final dot = trimmed.indexOf('.');
  if (dot == -1) {
    return XPathDecimal(BigInt.parse(trimmed), 0);
  }
  final scale = trimmed.length - dot - 1;
  final digits = trimmed.replaceFirst('.', '');
  return XPathDecimal(BigInt.parse(digits), scale);
}