Le problème de l'arrondi en SQL
Arrondi conventionnel
La fonction SQL "ROUND ()" prend une valeur existante et l'arrondit au nombre indiqué de décimales. Le format est le suivant:
ROUND ([valeur], [n], [1]))
Ici, "[valeur]" est une valeur décimale et "[n]" est le nombre de chiffres avec lesquels la valeur doit être arrondie. Cette fonction arrondit les valeurs de 0, 5 ou plus et les valeurs de 0, 49 ou moins vers le bas. Choisir la valeur "0" arrondit aux valeurs entières. Choisir la valeur "-1" arrondit au multiple du 10 le plus proche. Le troisième paramètre de la fonction "ROUND ()", "[1]", coupe le nombre avec le nombre indiqué de décimales si une valeur différente de zéro est choisie. Une source importante de problèmes d’arrondis inattendus est la fixation du troisième paramètre par des erreurs typographiques, le nombre de résultats étant tronqué au lieu d’être arrondi.
PLANCHER ET PLAFOND
SQL utilise la fonction "FLOOR ()" pour forcer l'arrondi vers le bas des valeurs au nombre entier le plus proche et la fonction "CEILING ()" pour arrondir à la valeur la plus proche. Les deux fonctions renvoient des valeurs entières. Même en utilisant un type de données flottant avec un nombre spécifié de décimales, ces fonctions renvoient une valeur avec des zéros après la position décimale.
Types de données recommandées
La cause la plus probable de l'apparition d'erreurs d'arrondi dans SQL est l'utilisation d'un type de données inattendu pour l'expression numérique de la fonction "ROUND ()" ou l'utilisation de "FLOOR ()" ou "CEILING ()". "lorsque vous vous attendez à obtenir un type de données décimal au lieu d’un nombre entier. Si votre fonction SQL donne des résultats d'arrondis inattendus, assurez-vous que la fonction "CAST ()" indiquant que le nombre a le type de données "entier", "décimal", "argent" ou "petit montant". Le type de données "décimal" est limité à 38 chiffres au total, une limitation qui affecte peu de personnes en dehors de la communauté scientifique.
Autres types de données
Il existe deux types de données qui renvoient des valeurs numériques et qui peuvent poser des problèmes avec la fonction "ROUND ()". Ce sont les types numériques "réels" et "flottants" en SQL, utilisés pour stocker de très petites fractions arrondies dans la plupart des versions de SQL, avec la dernière décimale dans le type de données indiqué. Certaines implémentations de SQL arrondissent à zéro, vers le bas ou de manière classique. Lorsque vous recevez des données dans une base de données SQL pouvant utiliser les types "real" ou "float", utilisez les fonctions "CAST ()" ou "CONVERT ()" pour les convertir en types de données "décimales".