driver-legacy/src/main/com/mongodb/util/JSON.java
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);
        }
    }
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);
        }
    }
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 ' ' : case ' ' : case ' ' : case ' ' : case ' ' : case ' ' : case ' ' : case ' ' : case ' ' : case ' ' : pos ++ ; break ; case ' ' : isDouble = true ; parseFraction ( ) ; break ; case ' ' : case ' ' : 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 ) ; } }
Parses a number.

@return the next number (int or double).
@throws JSONParseException if invalid JSON is found
Parses a number .