Type DECFLOAT

S’applique à :coché oui Databricks SQL coché oui Databricks Runtime 19 et supérieur

Représente des nombres en virgule flottante en base 10 avec 16 ou 34 chiffres significatifs et sans échelle fixe.

Important

DECFLOAT est en version bêta. Un administrateur d’espace de travail doit activer le type de données DECFLOAT dans les Aperçus.

Syntax

DECFLOAT [ ( p ) ]
  • p: Le nombre maximal de chiffres décimaux significatifs. Les valeurs prises en charge sont 16 et 34. La valeur par défaut est 34.

DECFLOAT n’accepte pas l’argument de l’échelle. Chaque valeur a son propre exposant.

Limits

Propriété DECFLOAT(16) DECFLOAT(34)
Chiffres significatifs Jusqu’à 16 Jusqu’à 34
Plus petite valeur positive non nulle 1E-398 1E-6176
Plus grande valeur positive finie (10^16 - 1) × 10^369 (10^34 - 1) × 10^6111

Les mêmes limites s’appliquent aux nombres négatifs. Les deux types prennent également en charge l’infini et le NaN.

Literals

Utilisez CAST avec une chaîne ou une valeur numérique prise en charge. Les chaînes peuvent aussi contenir NaN, Inf, ou Infinity.

Notes

DECFLOAT représente les valeurs décimales telles que 0.1 exactement. Les valeurs qui dépassent la précision peuvent arrondir sans erreur, y compris avec TRY_CAST. Lancez directement du texte décimal. Convertir à travers FLOAT peut DOUBLE perdre de la précision.

La sortie des chaînes préserve les zéros suivants, donc des valeurs égales comme 1.5 et 1.50 peuvent produire différentes chaînes (+15E-1 et +150E-2). Lances de DECFLOAT pour DECIMAL arrondir à moitié vers le haut, indépendamment de DECFLOAT_ROUNDING_MODE.

  • L’arithmétique préserve la précision lorsque les deux opérandes ont le même type DECFLOAT. Les précisions ou opérations mixtes avec d’autres types numériques pris en charge utilisent DECFLOAT(34).
  • SUM et AVG revenons DECFLOAT(34). MIN et MAX préserver la précision des entrées.
  • SQRT, ABS, et ROUND accepter directement DECFLOAT.

DECFLOAT_ROUNDING_MODE contrôle l’arrondi pour les lancers vers DECFLOAT, +, -, *, /, SQRT, SUM, , et AVG. La valeur par défaut est ROUND_HALF_EVEN. D’autres modes pris en charge sont ROUND_HALF_UP, ROUND_CEILING, ROUND_FLOOR, et ROUND_DOWN. DIV supprime la partie fractionnaire du résultat, indépendamment de DECFLOAT_ROUNDING_MODE. ROUND, BROUND, et TRUNCATE utilisent leurs propres règles d’arrondi.

> SET DECFLOAT_ROUNDING_MODE = ROUND_FLOOR;
> SELECT CURRENT_DECFLOAT_ROUNDING_MODE();
  ROUND_FLOOR

Avec le mode d’arrondi par défaut, le débordement produit l’infini et la division par zéro produit l’infini ou NaN. Le mode ANSI ne modifie pas ces résultats. Les fonctions arithmétiques prises en charge TRY_* préservent l’infini et NaN plutôt que de retourner NULL. Les NaN comparent égaux et trient après l’infini positif. Un positif et un moins zéro égales à la comparaison. Utilisé ISNAN pour détecter le NaN.

Examples

> SELECT CAST('1.5' AS DECFLOAT(34)) + CAST('2.5' AS DECFLOAT(34)) AS total;
  +40E-1

> SELECT CAST(CAST('1.23E+100' AS DECFLOAT(34)) AS STRING);
  +123E+98

> SELECT typeof(CAST('1' AS DECFLOAT(16)) + 1);
  decfloat(34)

Limitations

  • Les opérations de reste et de bits par bit ne sont pas prises en charge.
  • Les fonctions nécessitant DOUBLE des entrées n’acceptent pas directement DECFLOAT. Convertissez la valeur en DOUBLE première (cela peut entraîner une perte de précision).
  • DECFLOAT n’est pas compatible avec les vecteurs de délétion. Lors de la création d’une table Delta avec des colonnes DECFLOAT, on définit TBLPROPERTIES ('delta.enableDeletionVectors' = 'false'). Pour les tables existantes, supprimez la fonction de tableau vectoriel de suppression avant d’ajouter les colonnes DECFLOAT.
  • Les tables Delta contenant DECFLOAT ne peuvent pas activer les lectures Iceberg .
  • L’écriture directe des valeurs DECFLOAT dans des fichiers Parquet n’est pas prise en charge.
  • Les colonnes DECFLOAT ne comportent pas de statistiques min/max pour le saut de données. Ils ne peuvent pas être des colonnes de partition, des clés de clustering, des colonnes d’ordre Z ou des colonnes index de filtre de Bloom.
  • Changer une colonne entre DECFLOAT(16) et DECFLOAT(34) avec ALTER COLUMN n’est pas supporté.