Esta sección discute el redondeo de la matemática precisa para
la función ROUND()
y para inserciones en
columnas DECIMAL
.
La función ROUND()
redondea de forma distinta
dependiendo de si su argumento es exacto o aproximada:
Para valores exactos, ROUND()
usa la regla
"redondeo al alza": Un valor con parte fraccional de .5 o
superior se redondea al siguiente entero si es positivo o al
anterior entero si es negativo. (En otras palabras, siempre se
redondea alejándose del cero.) Un valor con una parte
fraccional menor que .5 se redondea al anterior valor entero
si es positivo o al siguiente entero si es negativo.
Para números aproximados, el resultado depende de la
biblioteca C. En muchos sistemas, esto significa que
ROUND()
usa la regla "redondeo al número
par más próximo": Un valor con un parte fraccional se
redondea al siguiente entero par.
El siguiente ejemplo muestra cómo difiere el redondeo para valores exactos y aproximados:
mysql> SELECT ROUND(2.5), ROUND(25E-1); +------------+--------------+ | ROUND(2.5) | ROUND(25E-1) | +------------+--------------+ | 3 | 2 | +------------+--------------+
Para inserciones en una columna DECIMAL
, el
objetivo es un tipo de datos exacto, así que el redondea usa
"redondeo al alza" independientemente de si el valor a ser
insertado es exacto o aproximado:
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 | +------+
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.