**Describe the bug**

JSONExtract returns 0 for numbers with floating-point for type *float / Float32*.

**How to reproduce**

```sql
WITH '{ "v":1.1}' AS raw
SELECT 
    JSONExtract(raw, 'v', 'float') AS float32_1,
    JSONExtract(raw, 'v', 'Float32') AS float32_2,
    JSONExtractFloat(raw, 'v') AS float64_1,
    JSONExtract(raw, 'v', 'double') AS float64_2

/*
┌─float32_1─┬─float32_2─┬─float64_1─┬─float64_2─┐
│         0 │         0 │       1.1 │       1.1 │
└───────────┴───────────┴───────────┴───────────┘
*/
```

```sql
WITH '{ "v":1E-2}' AS raw
SELECT 
    JSONExtract(raw, 'v', 'float') AS float32_1,
    JSONExtract(raw, 'v', 'Float32') AS float32_2,
    JSONExtractFloat(raw, 'v') AS float64_1,
    JSONExtract(raw, 'v', 'double') AS float64_2

/*
┌─float32_1─┬─float32_2─┬─float64_1─┬─float64_2─┐
│         0 │         0 │      0.01 │      0.01 │
└───────────┴───────────┴───────────┴───────────┘
*/
```

**Expected behavior**

I think either need to add support *float / Float32* type or throw an exception to point to need to use *double / Float64* type.

**Additional context**
CH v. 20.6.4.44

throw Exception{"The first argument of function " + String(Name::name) + " should be a string containing JSON, illegal type: " + first_column.type->getName(),
                                ErrorCodes::ILLEGAL_TYPE_OF_ARGUMENT};
            const ColumnPtr & arg_json = first_column.column;
            const auto * col_json_const = typeid_cast<const ColumnConst *>(arg_json.get());
            const auto * col_json_string
                = typeid_cast<const ColumnString *>(col_json_const ? col_json_const->getDataColumnPtr().get() : arg_json.get());
            if (!col_json_string)
                throw Exception{"Illegal column " + arg_json->getName(), ErrorCodes::ILLEGAL_COLUMN};
            const ColumnString::Chars & chars = col_json_string->getChars();
            const ColumnString::Offsets & offsets = col_json_string->getOffsets();
            size_t num_index_arguments = Impl<JSONParser>::getNumberOfIndexArguments(arguments);
            std::vector<Move> moves = prepareMoves(Name::name, arguments, 1, num_index_arguments);
            
            JSONParser parser;
            if constexpr (has_member_function_reserve<void (JSONParser::*)(size_t)>::value)
            {
                size_t max_size = calculateMaxSize(offsets);
                if (max_size)
                    parser.reserve(max_size);
            }
            Impl<JSONParser> impl;
            
            if constexpr (has_member_function_prepare<void (Impl<JSONParser>::*)(const char *, const ColumnsWithTypeAndName &, const DataTypePtr &)>::value)
                impl.prepare(Name::name, arguments, result_type);
            using Element = typename JSONParser::Element;
            Element document;
            bool document_ok = false;
            if (col_json_const)
            {
                std::string_view json{reinterpret_cast<const char *>(&chars[0]), offsets[0] - 1};