docs: function parse(numStr) {
    var exponent = 0, digits, numberOfIntegerDigits;
    var i, j, zeros;
  
    // Decimal point?
    if ((numberOfIntegerDigits = numStr.indexOf(DECIMAL_SEP)) > -1) {
      numStr = numStr.replace(DECIMAL_SEP, '');
    }
  
    // Exponential form?
    if ((i = numStr.search(/e/i)) > 0) {
      // Work out the exponent.
      if (numberOfIntegerDigits < 0) numberOfIntegerDigits = i;
      numberOfIntegerDigits += +numStr.slice(i + 1);
      numStr = numStr.substring(0, i);
    } else if (numberOfIntegerDigits < 0) {
      // There was no decimal point or exponent so it is an integer.
      numberOfIntegerDigits = numStr.length;
    }
  
    // Count the number of leading zeros.
    for (i = 0; numStr.charAt(i) == ZERO_CHAR; i++) {/* jshint noempty: false */}
  
    if (i == (zeros = numStr.length)) {
      // The digits are all zero.
      digits = [0];
      numberOfIntegerDigits = 1;
    } else {
      // Count the number of trailing zeros
      zeros--;
      while (numStr.charAt(zeros) == ZERO_CHAR) zeros--;
  
      // Trailing zeros are insignificant so ignore them
      numberOfIntegerDigits -= i;
      digits = [];
      // Convert string to array of digits without leading/trailing zeros.
      for (j = 0; i <= zeros; i++, j++) {
        digits[j] = +numStr.charAt(i);
      }
    }
  
    // If the number overflows the maximum allowed digits then use an exponent.
    if (numberOfIntegerDigits > MAX_DIGITS) {
      digits = digits.splice(0, MAX_DIGITS - 1);
      exponent = numberOfIntegerDigits - 1;
      numberOfIntegerDigits = 1;
    }
  
    return { d: digits, e: exponent, i: numberOfIntegerDigits };
  }