code: public Number parseNumber() {
  
          get();
          int start = this.pos;
          boolean isDouble = false;
  
          if (check('-') || check('+')) {
              pos++;
          }
  
          outer:
          while (pos < s.length()) {
              switch (s.charAt(pos)) {
                  case '0':
                  case '1':
                  case '2':
                  case '3':
                  case '4':
                  case '5':
                  case '6':
                  case '7':
                  case '8':
                  case '9':
                      pos++;
                      break;
                  case '.':
                      isDouble = true;
                      parseFraction();
                      break;
                  case 'e':
                  case 'E':
                      isDouble = true;
                      parseExponent();
                      break;
                  default:
                      break outer;
              }
          }
  
          try {
              if (isDouble) {
                  return Double.valueOf(s.substring(start, pos));
              }
  
              Long val = Long.valueOf(s.substring(start, pos));
              if (val <= Integer.MAX_VALUE && val >= Integer.MIN_VALUE) {
                  return val.intValue();
              }
              return val;
          } catch (NumberFormatException e) {
              throw new JSONParseException(s, start, e);
          }
      }
docs: Parses a number.
  
  @return the next number (int or double).
  @throws JSONParseException if invalid JSON is found