FLOAT 是一种单精度浮点数据类型,用于 CREATE TABLE 和 ALTER TABLE 语句。语法
在
CREATE TABLE 的列定义中:column_nameFLOAT
数值特性
取值范围:
正数范围:[
1.40129846432481707e-45 , 3.40282346638528860e+38]负数范围:[
-3.40282346638528860e+38, -1.40129846432481707e-45]精度:6 到 9 位有效数字,具体取决于使用情况。有效数字的位数与小数点的位置无关。
存储表示:占用 4 字节 存储空间,遵循 IEEE 754 单精度二进制浮点数 格式。
数据转换
隐式转换
TCHouse-X 会自动将
FLOAT 转换为更高精度的 DOUBLE 值,但不支持反向隐式转换。显式转换
可使用
CAST() 将 FLOAT 转换为 TINYINT、SMALLINT、INT、BIGINT、STRING。SELECTCAST(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 秒后的时间戳。使用说明与限制
聚合计算的差异性
由于
FLOAT 和 DOUBLE 采用高性能硬件指令进行算术运算,且分布式查询在处理海量数据时,各节点执行运算的顺序可能不同,导致对大批量数据进行 SUM() 或 AVG() 等聚合操作时,结果可能会有微小差异。若要求结果严格一致且可重复,请使用 DECIMAL 类型。精度缺失风险
浮点数无法精确表示某些小数值。在对精度要求极高的场景(尤其是从其他使用不同存储格式的数据库系统迁移数据时),
DECIMAL 通常是比 FLOAT 或 DOUBLE 更好的选择。