Catégories :

Fonctions de conversion

TO_DOUBLE

Convertit une expression en un nombre à virgule flottante de double précision.

Pour NULL, le résultat est NULL.

Voir aussi :

TRY_TO_DOUBLE

Syntaxe

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

Arguments

expr

Expression de type numérique, caractère ou variante.

format

Si l’expression renvoie une chaîne, la fonction accepte un modèle de format facultatif. Les modèles de format sont décrits à l’emplacement : Modèles de format SQL. Le modèle de format spécifie le format de la chaîne d’entrée, pas le format de la valeur de sortie.

Renvoie

La fonction renvoie une valeur de type de données FLOAT.

Si expr est NULL, la fonction renvoie NULL.

Notes sur l’utilisation

  • Les nombres à virgule fixe sont convertis en virgule flottante ; la conversion ne peut pas échouer, mais peut entraîner une perte de précision.

  • Les chaînes sont converties en nombres décimaux entiers ou fractionnaires, la notation scientifique et les valeurs spéciales (nan, inf, infinity) sont acceptées.

  • Pour une entrée VARIANT :

    • Si la variante contient une valeur à virgule fixe, la conversion numérique est effectuée.

    • Si la variante contient une valeur à virgule flottante, la valeur sera conservée telle quelle.

    • Si la variante contient une chaîne, une conversion de chaîne sera effectuée.

    • Si la variante contient une valeur booléenne, le résultat sera 0 ou 1 (pour false et true, en conséquence).

    • Si la variante contient la valeur JSON null, le résultat sera NULL.

  • La conversion des fractions décimales en valeurs binaires flottantes et inverses n’est pas précise (c’est-à-dire que l’impression d’un nombre à virgule flottante converti à partir de la représentation décimale pourrait produire un nombre légèrement différent). Si une représentation précise des fractions décimales est requise, utilisez des nombres à virgule fixe.

Exemples

Après avoir créé une table avec des colonnes de types de données différents, ce script appelle TO_DOUBLE sur chacune de ces colonnes :

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 |
+--------------+--------------+--------------+

L’exemple suivant montre que la conversion d’un nombre binaire flottant en un nombre n’est pas précise :

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