类别:

转换函数

TO_DOUBLE

将表达式转换为双精度浮点数。

对于 NULL 输入,结果为 NULL。

另请参阅:

TRY_TO_DOUBLE

语法

TO_DOUBLE( <expr> [, '<format>' ] )
Copy

实参

expr

数字、字符或变体类型的表达式。

format

如果表达式的计算结果为字符串,则该函数接受可选的格式模型。有关格式模型的信息,请参阅 SQL 格式模型。格式模型指定输入字符串的格式,而不是输出值的格式。

返回

此函数返回 FLOAT 数据类型的值。

如果 expr 为 NULL,则函数返回 NULL。

使用说明

  • 定点数转换为浮点数;转换不会失败,但可能会降低精度。

  • 字符串可转换为十进制整数或小数,也接受科学记数法和特殊值(naninfinfinity)。

  • 对于 VARIANT 输入:

    • 如果变体包含定点值,则执行数字转换。

    • 如果变体包含浮点值,则值保持不变。

    • 如果变体包含字符串,则执行字符串转换。

    • 如果变体包含布尔值,则结果为 0 或 1(分别表示 False 和 True)。

    • 如果变体包含 JSON null 值,则输出将为 NULL。

  • 十进制分数与二进制浮点之间的相互转换并不精确(即,打印从十进制表示方法转换而来的浮点数可能会产生略有不同的数字)。如果需要精确表示十进制分数,请使用定点数。

示例

创建具有不同数据类型列的表后,此脚本对其中每个列调用 TO_DOUBLE :

CREATE OR REPLACE TABLE double_demo (d DECIMAL(7, 2), v VARCHAR, o VARIANT);
INSERT INTO double_demo (d, v, o) SELECT 1.1, '2.2', TO_VARIANT(3.14);
SELECT TO_DOUBLE(d), TO_DOUBLE(v), TO_DOUBLE(o) FROM double_demo;
Copy
+--------------+--------------+--------------+
| TO_DOUBLE(D) | TO_DOUBLE(V) | TO_DOUBLE(O) |
|--------------+--------------+--------------|
|          1.1 |          2.2 |         3.14 |
+--------------+--------------+--------------+

下面的示例表明,从二进制浮点数转换回数字的结果并不精确:

SELECT TO_DOUBLE(1.1)::NUMBER(38, 18);
Copy
+--------------------------------+
| TO_DOUBLE(1.1)::NUMBER(38, 18) |
|--------------------------------|
|           1.100000000000000089 |
+--------------------------------+
语言: 中文