FLOAT

最近更新时间:2026-05-06 16:28:12

我的收藏
FLOAT 是一种单精度浮点数据类型,用于 CREATE TABLEALTER TABLE 语句。

语法

CREATE TABLE 的列定义中:
column_name FLOAT

数值特性

取值范围:
正数范围:[1.40129846432481707e-45 , 3.40282346638528860e+38]
负数范围:[-3.40282346638528860e+38, -1.40129846432481707e-45]
精度:6 到 9 位有效数字,具体取决于使用情况。有效数字的位数与小数点的位置无关。
存储表示:占用 4 字节 存储空间,遵循 IEEE 754 单精度二进制浮点数 格式。

数据转换

隐式转换

TCHouse-X 会自动将 FLOAT 转换为更高精度的 DOUBLE 值,但不支持反向隐式转换。

显式转换

可使用 CAST()FLOAT 转换为 TINYINTSMALLINTINTBIGINTSTRING
SELECT
CAST(123.45 AS TINYINT) AS to_tinyint,
CAST(1234.56 AS SMALLINT) AS to_smallint,
CAST(123456.7 AS INT) AS to_int,
CAST(9876543210.1 AS BIGINT) AS to_bigint,
CAST(1.0 AS BOOLEAN) AS true_case,
CAST(123.45 AS STRING) AS to_string;
-- 结果:123,234,123456,9876543210,1,'123.45'
科学计数法:在 FLOAT 字面量或从 STRING 转换时,可以使用指数表示法(例如 1.0e6 表示一百万)。
TIMESTAMP/TIMESTAMPTZ 转换规则:将整数值 N 转换为 TIMESTAMP/TIMESTAMPTZ时,系统会生成一个以 Unix 纪元(1970-01-01 00:00:00 UTC)为基准、增加 N 秒后的时间戳。在查询展示时,该值会自动转换为当前系统时区对应的本地时间。
TIMESTAMPNTZ 转换规则:将整数值 N 转换为 TIMESTAMPNTZ时,系统会生成一个以 Unix 纪元(1970-01-01 00:00:00 UTC)为基准、增加 N 秒后的时间戳。

使用说明与限制

聚合计算的差异性

由于 FLOATDOUBLE 采用高性能硬件指令进行算术运算,且分布式查询在处理海量数据时,各节点执行运算的顺序可能不同,导致对大批量数据进行 SUM()AVG() 等聚合操作时,结果可能会有微小差异。若要求结果严格一致且可重复,请使用 DECIMAL 类型。

精度缺失风险

浮点数无法精确表示某些小数值。在对精度要求极高的场景(尤其是从其他使用不同存储格式的数据库系统迁移数据时),DECIMAL 通常是比 FLOATDOUBLE 更好的选择。