code: public double nextDouble() throws IOException {
      peek();
      if (token != JsonToken.STRING && token != JsonToken.NUMBER) {
        throw new IllegalStateException("Expected a double but was " + token
            + " at line " + getLineNumber() + " column " + getColumnNumber());
      }
  
      double result = Double.parseDouble(value);
  
      if ((result >= 1.0d && value.startsWith("0"))) {
        throw new MalformedJsonException("JSON forbids octal prefixes: " + value
            + " at line " + getLineNumber() + " column " + getColumnNumber());
      }
      if (!lenient && (Double.isNaN(result) || Double.isInfinite(result))) {
        throw new MalformedJsonException("JSON forbids NaN and infinities: " + value
            + " at line " + getLineNumber() + " column " + getColumnNumber());
      }
  
      advance();
      return result;
    }
docs: Returns the {@link JsonToken#NUMBER double} value of the next token,
  consuming it. If the next token is a string, this method will attempt to
  parse it as a double using {@link Double#parseDouble(String)}.
  
  @throws IllegalStateException if the next token is not a literal value.
  @throws NumberFormatException if the next literal value cannot be parsed
  as a double, or is non-finite.