DOUBLE
64 位双精度浮点类型(DOUBLE)遵循 IEEE 754 标准,用于存储实数。可以表示非常大或非常小的数值,有效精度约为 15 到 17 位十进制数字。
语法
值范围
- 最大正值:约 1.7976931348623157 × 10³⁰⁸
- 最小正值(非零):约 4.9 × 10⁻³²⁴
- 字面量后缀:
(如D
、1D
)-6.5D
示例
-
使用 DOUBLE 字面量后缀:
返回:
1 -
将整数转换为 DOUBLE:
返回:
-6 -
科学计数法表示:
返回:
19971400000000 -
将字符串转换为 DOUBLE:
返回:
123.456 -
两个 DOUBLE 值相加:
返回:
802.366 -
比较两个 DOUBLE 值:
返回:
true -
计算平方根:
返回:
4 -
NULL 值处理:
返回:
NULL -
精度损失示例(DOUBLE 与 DECIMAL 的差异):
返回:
(存在浮点精度误差)0.30000000000000004对比使用 DECIMAL:
返回:
(精确计算)0.3
选型建议
| 场景 | 推荐类型 | 原因 |
|---|---|---|
| 金融金额、精确计算 | | 精确小数,无浮点误差 |
| 科学计算、统计分析 | | 精度高(15-17位),范围大 |
| 向量/ML 特征值 | | 精度够用,存储节省一半 |
| 需要与 FLOAT 互操作 | | 隐式提升,不丢精度 |
DOUBLE 与 FLOAT 的精度对比(实测):
注意事项
- DOUBLE 是近似数值类型,不适合用于需要精确计算的场景(如金融金额)。精确计算请使用
类型。DECIMAL - 浮点数的比较可能因精度误差产生意外结果,避免直接用
比较两个 DOUBLE 值。= - 算术溢出(超出约 ±1.8×10³⁰⁸)返回
或Infinity
;-Infinity
等无效运算返回sqrt(-1)
。NaN - 除以零(
、0.0/0.0
)在 Lakehouse 宽松模式下返回1.0/0.0
,不返回NULL
或Infinity
。建议用NaN
显式处理,使意图更清晰:NULLIF(denominator, 0)
。numerator / NULLIF(denominator, 0) - CAST 转换失败时返回 NULL。
联系我们
