- Categorias:
TO_DOUBLE¶
Converte uma expressão em um número de ponto flutuante de dupla precisão.
Para a entrada NULL, o resultado é NULL.
- Consulte também:
Sintaxe¶
TO_DOUBLE( <expr> [, '<format>' ] )
Argumentos¶
expr
Uma expressão de um tipo numérico, de caractere ou variante.
format
Se a expressão avalia como uma cadeia de caracteres, então a função aceita um modelo de formato opcional. Os modelos de formato são descritos em Modelos de formato SQL. O modelo de formato especifica o formato da cadeia de caracteres de entrada, não o formato do valor da saída.
Retornos¶
Esta função retorna um valor do tipo de dados FLOAT.
Se expr
for NULL, a função retornará NULL.
Notas de uso¶
Os números de pontos fixos são convertidos em ponto flutuante; a conversão não pode falhar, mas pode resultar em perda de precisão.
As cadeias de caracteres são convertidas como números inteiros decimais ou fracionários, notação científica e valores especiais (nan, inf, infinidade) são aceitos.
Para entrada VARIANT:
Se a variante contiver um valor de ponto fixo, a conversão numérica será realizada.
Se a variante contiver um valor de ponto flutuante, o valor será preservado inalterado.
Se a variante contiver uma cadeia de caracteres, será realizada uma conversão da cadeia de caracteres.
Se a variante contiver um valor booleano, o resultado será 0 ou 1 (para falso e verdadeiro, correspondentemente).
Se a variante contiver um valor nulo JSON, a saída será NULL.
A conversão de frações decimais para ponto flutuante binário e vice-versa não é precisa (ou seja, a impressão de uma número de ponto flutuante convertido de uma representação decimal pode produzir um número ligeiramente diferente). Se for necessária uma representação precisa das frações decimais, use números de pontos fixos.
Exemplos¶
Depois de criar uma tabela com colunas de diferentes tipos de dados, este script chama TO_DOUBLE em cada uma dessas colunas:
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;
+--------------+--------------+--------------+
| TO_DOUBLE(D) | TO_DOUBLE(V) | TO_DOUBLE(O) |
|--------------+--------------+--------------|
| 1.1 | 2.2 | 3.14 |
+--------------+--------------+--------------+
O exemplo a seguir mostra que a conversão de um float binário de volta para um número não é precisa:
SELECT TO_DOUBLE(1.1)::NUMBER(38, 18);
+--------------------------------+
| TO_DOUBLE(1.1)::NUMBER(38, 18) |
|--------------------------------|
| 1.100000000000000089 |
+--------------------------------+