Cette section présente les méthodes d'arrondissement des valeurs
par la fonction ROUND()
et lors des insertions
dans ces colonnes de type DECIMAL
.
La fonctoin ROUND()
arrondit différement les
valeurs, suivant qu'elles sont exactes ou approximative :
Pour les valeurs exactes, ROUND()
utilise
la règle de l'arrondissement "à l'entier supérieur" : une
valeur ayant une partie décimale de 0.5 ou plus est arrondie
au prochain entier si elle est positive, et à l'entier
inférieur si elle est négative (en d'autres termes, elle est
arrondi en s'éloignant de 0). Une valeur avec une partie
décimale inférieure à .5 est arrondi à l'entier inférieur
si elle est positive, et supérieur si elle est négative.
Pour les nombres à valeur approchée, le résultat dépend de
la bibliothèque C du système. Sur de nombreuses
plates-formes, cela signifie que ROUND()
utilise la règle de l'arrondissement "au prochain entier
pair" : une valeur où la partie décimale est arrondie au
prochain entier pair.
L'exemple suivant illustre la différence de comportement entre les deux valeurs :
mysql> SELECT ROUND(2.5), ROUND(25E-1);
+------------+--------------+
| ROUND(2.5) | ROUND(25E-1) |
+------------+--------------+
| 3 | 2 |
+------------+--------------+
Pour les insertions dans les colonnes de type
DECIMAL
, la cible est une valeur exacte, ce qui
fait que l'arrondissement se fait à l'entier le plus proche,
indépendamment de la nature de la valeur insérée, approchée ou
exacte :
mysql>CREATE TABLE t (d DECIMAL(10,0));
Query OK, 0 rows affected (0.00 sec) mysql>INSERT INTO t VALUES(2.5),(2.5E0);
Query OK, 2 rows affected, 2 warnings (0.00 sec) Records: 2 Duplicates: 0 Warnings: 2 mysql>SELECT d FROM t;
+------+ | d | +------+ | 3 | | 3 | +------+
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.