FirebirdSQL logo

SET DECFLOAT ROUND

L’opérateur SET DECFLOAT ROUND change le mode d’arrondi pour la session en cours.Les modes d’arrondi suivants, compatibles IEEE, sont pris en charge :

CEILLING

Arrondissement à partir du haut. Si tous les chiffres rejetés sont des zéros ou si le signe du nombre est négatif, le dernier chiffre non rejeté reste le même. Dans le cas contraire, le dernier chiffre non rejeté est incrémenté de un (arrondi à l’unité supérieure).

UP

Arrondissement à partir de zéro (troncature avec incrément). Les valeurs rejetées sont ignorées.

HALF_UP

Arrondi à la valeur la plus proche. Cette option est utilisée par défaut. Si le résultat est équidistant, l’arrondi au chiffre supérieur est effectué. Si les valeurs écartées sont supérieures ou égales à la moitié (0,5) de un à la position gauche suivante, le dernier chiffre non écarté est incrémenté de un (arrondi vers le haut). Sinon, les valeurs rejetées sont ignorées.

HALF_EVEN

Arrondi à la valeur la plus proche. Si le résultat est équidistant, l’arrondi est effectué de manière à ce que le dernier chiffre soit pair. Si les valeurs rejetées sont supérieures à la moitié (0,5) d’une unité dans la position suivante à gauche, le dernier chiffre non rejeté est incrémenté d’une unité (arrondi à l’unité supérieure). S’ils sont inférieurs à la moitié, le résultat n’est pas corrigé, c’est-à-dire que les chiffres rejetés sont ignorés. Dans le cas contraire, lorsque les valeurs rejetées sont exactement égales à la moitié, le dernier chiffre non rejeté est inchangé s’il est pair et incrémenté d’une unité (arrondi au chiffre supérieur) dans le cas contraire (pour obtenir un chiffre pair). Ce mode d’arrondi est également appelé arrondi de banque et donne une impression d’arrondi équitable.

HALF_DOWN

Arrondir à la valeur la plus proche. Si le résultat est équidistant, l’arrondi au chiffre inférieur est effectué. Si les valeurs écartées sont supérieures ou égales à la moitié (0,5) de un dans la position gauche suivante, le dernier chiffre non écarté est décrémenté de un (arrondi vers le bas). Sinon, les valeurs rejetées sont ignorées.

DOWN

Arrondi vers zéro (troncature). Les valeurs rejetées sont ignorées.

FLOOR

Arrondi vers le bas. Si tous les chiffres écartés sont des zéros ou si le signe est positif, le dernier chiffre non écarté ne change pas. Dans le cas contraire (signe négatif), le dernier chiffre non rejeté est incrémenté de un.

REROUND

Arrondi à une valeur supérieure si l’arrondi est de 0 ou 5, sinon l’arrondi est à une valeur inférieure.

Example 1. Changement du mode d’arrondi
SET DECFLOAT ROUND HALF_DOWN;
Modes d’arrondi 12.341 12.345 12.349 12.355 12.405 -12.345

CEILING

12.35

12.35

12.35

12.36

12.41

-12.34

UP

12.35

12.35

12.35

12.36

12.41

-12.35

HALF_UP

12.34

12.35

12.35

12.36

12.41

-12.35

HALF_EVEN

12.34

12.34

12.35

12.36

12.40

-12.34

HALF_DOWN

12.34

12.34

12.35

12.35

12.40

-12.34

DOWN

12.34

12.34

12.34

12.35

12.40

-12.34

FLOOR

12.34

12.34

12.34

12.35

12.40

-12.35

REROUND

12.34

12.34

12.34

12.36

12.41

-12.34

SET DECFLOAT TRAPS

L’instruction SET DECFLOAT TRAPS modifie le comportement d’erreur des opérations avec le type DECFLOAT.

Par défaut, des exceptions sont générées pour les situations suivantes : DIVISION_BY_ZERO,INVALID_OPERATION,OVERFLOW ;cette valeur par défaut correspond au comportement défini dans la norme SQL : 2016 pour DECFLOAT.Cet opérateur permet de contrôler si certaines conditions exceptionnelles entraînent une erreur ("trap") ou un échec.traitement alternatif (par exemple, la perte de signification renvoie 0 si elle n’est pas définie, ou un dépassement renvoie l’infini).La configuration initiale de la connexion peut également être spécifiée en utilisant la balise DPB isc_dpb_decfloat_traps.avec les valeurs trap_opt souhaitées, séparées par des virgules, sous forme de chaîne de caractères.

Variantes de pièges autorisées (conditions exceptionnelles) :

Division_by_zero

(par défaut)

Inexact

 — 

Invalid_operation

(par défaut)

Overflow

(par défaut)

Underflow

 — 

Example 1. Définir les situations pour lesquelles une exception sera générée
SET DECFLOAT TRAPS TO Division_by_zero, Inexact, Invalid_operation, Overflow, Underflow;