为什么在 ClickHouse 表中不鼓励浮点表示?

cra*_*rak 5 floating-point decimal-point clickhouse

文档Float32并没有真正解释 的行为Float64以及不鼓励它们的原因。

我问这个问题是因为在将这些与控制台 cli 请求或 Rest 请求一起使用时,我看到了奇怪的行为。无论精度如何,发送到 clickhouse 的浮点值在最后一位都会稍微修改。

示例:1258.021545成为1258.0215453.

每次插入这些值时,最后一位数字都会更改。我不认为问题来自太高的精度值,因为这些值来自 Java 双精度数。

vrs*_*vrs 2

ClickHouse 文档令人沮丧的唯一原因Float舍入错误。它与 ClickHouse 本身无关,而是一种实数表示的算法。

  • 如果您不介意偶尔出现一些舍入错误,请继续使用浮点数。
  • 但是,如果您存储代表金钱的数字,则浮点数是禁区。在这种情况下,将小数点左右的部分作为整数存储在两个不同的字段中。