Skip to content

Cannot store float boundary values correctly like Float.MAX_VALUE #809

@cantfu

Description

@cantfu

When I insert Float.MAX_VALUE into table column with Float64 type, it seems cannot store the correct precision!

reproduct:

  1. jdbc version: 0.2.4/0.3.2-patch2
    clickhouse version: 21.3.5.42

  2. create table:

    CREATE TABLE default.`TEST_Boundary`
    (
        `byte` Int32,
        `double1` Nullable(Float64),
        `double2` Nullable(Float64)
    )
    ENGINE = MergeTree
    ORDER BY byte
    SETTINGS index_granularity = 8192;
  3. insert value using jdbc

    PreparedStatement preparedStatement = ckConnection
             .prepareStatement("insert into default.`TEST_Boundary` values(1, ?, ?)");
    preparedStatement.setObject(1, Float.MAX_VALUE);
    preparedStatement.setObject(2, Double.MAX_VALUE);
    preparedStatement.addBatch();
    preparedStatement.executeBatch();
  4. select using jdbc

    1			3.4028235000000003E38			1.7976931348623157E308
    

We can find that Double.MAX_VALUE can be stored correctly, but Float.MAX_VALUE cannot(should be 3.4028235E38).
Is it a jdbc bug? or it is a clickhouse issue?

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions