parse method

Big parse(
  1. Big x,
  2. String n
)

Parse the number or string value passed to a Big constructor.

  • x Big A Big number instance.
  • n String A numeric value.

Implementation

Big parse(Big x, String n) {
  int e, i, nl;

  if (!_numeric.hasMatch(n)) {
    throw BigError(
      code: BigErrorCode.type,
    );
  }

  // Determine sign.
  if (n[0] == '-') {
    n = n.substring(1);
    x.s = -1;
  } else {
    x.s = 1;
  }

  // Decimal point?
  if ((e = n.indexOf('.')) > -1) {
    n = n.replaceFirst('.', '');
  }

  // Exponential form?
  if ((i = n.indexOf(RegExp(r'e', caseSensitive: false))) > 0) {
    // Determine exponent.
    if (e < 0) {
      e = i;
    }
    e += int.parse(n.substring(i + 1));
    n = n.substring(0, i);
  } else if (e < 0) {
    // Integer.
    e = n.length;
  }

  nl = n.length;

  // Determine leading zeros.
  for (i = 0; i < nl && n[i] == '0';) {
    ++i;
  }

  if (i == nl) {
    // Zero.
    x.c = [x.e = 0];
  } else {
    // Determine trailing zeros.
    for (; nl > 0 && n[--nl] == '0';) {}
    x.e = e - i - 1;
    x.c = [];

    // Convert string to array of digits without leading/trailing zeros.
    for (e = 0; i <= nl;) {
      x.c.add(int.parse(n[i++]));
    }
  }
  return x;
}