**Describe the bug**
It's not possible to compare Decimal and Float values. But actually both of them point to some specific value on real number line, so we can compare and that wouldn't produce any precision loss.

**How to reproduce**
Clickhouse 21.5
```
SELECT toDecimal32('11.00', 2) > 1.

Query id: f2c1cba1-748e-42ea-83ac-e117b542d576


0 rows in set. Elapsed: 0.002 sec.

Received exception from server (version 21.5.1):
Code: 43. DB::Exception: Received from localhost:9000. DB::Exception: No operation greater between Decimal(9, 2) and Float64: While processing toDecimal32('11.00', 2) > 1..
```



Loosely related https://github.com/ClickHouse/ClickHouse/issues/5690
{
      if (custom_name)
          return custom_name->getName();
      else
          return doGetName();
    }
    DataTypePtr getPtr() const { return shared_from_this(); }
    
    virtual const char * getFamilyName() const = 0;
    
    virtual TypeIndex getTypeId() const = 0;
    DataTypePtr tryGetSubcolumnType(const String & subcolumn_name) const;
    DataTypePtr getSubcolumnType(const String & subcolumn_name) const;
    SerializationPtr getSubcolumnSerialization(const String & subcolumn_name, const SerializationPtr & serialization) const;
    ColumnPtr getSubcolumn(const String & subcolumn_name, const ColumnPtr & column) const;
    using SubstreamData = ISerialization::SubstreamData;
    using SubstreamPath = ISerialization::SubstreamPath;
    using SubcolumnCallback = std::function<void(
        const SubstreamPath &,
        const String &,
        const SubstreamData &)>;
    static void forEachSubcolumn(
        const SubcolumnCallback & callback,
        const SubstreamData & data);
    Names getSubcolumnNames() const;
    virtual MutableSerializationInfoPtr createSerializationInfo(
        const SerializationInfo::Settings & settings) const;
    
    virtual bool supportsSparseSerialization() const { return !haveSubtypes(); }