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 | +------+