Ver Mensaje Individual
  #5 (permalink)  
Antiguo 19/08/2015, 20:29
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: ROUND no realiza el redondeo

Es un comportamiento propio de las variables de usuario de MySQL.
Al principio, las variables de usuario no tienen tipo de dato, su valor es NULL, y se redefinen con el primer valor que se almacena en ellas. En tu caso pasan a ser DECIMAL, dada la longitud del dato con el que se definen en la primera columna, y el truncado se produce por redondeo hacia abajo.
En la segunda ejecución ya tienen tipo de dato, decimal, y la operación genera una conversión implícita en FLOAT, cuyo redondeo es hacia arriba.
Código MySQL:
Ver original
  1. mysql> select @a := 992.75 Inicial, (@a * (1 + 18 / 100)) completo, ROUND(@a * (1 + 18 / 100), 2) Total;
  2. +---------+----------+---------+
  3. | Inicial | completo | Total   |
  4. +---------+----------+---------+
  5. |  992.75 | 1171.445 | 1171.44 |
  6. +---------+----------+---------+
  7. 1 row in set (0.00 sec)
  8.  
  9. mysql> select @a := 992.75 Inicial, (@a * (1 + 18 / 100)) completo, ROUND(@a * (1 + 18 / 100), 2) Total;
  10. +---------+-------------------------------------+---------+
  11. | Inicial | completo                            | Total   |
  12. +---------+-------------------------------------+---------+
  13. |  992.75 | 1171.445000000000000000000000000000 | 1171.45 |
  14. +---------+-------------------------------------+---------+
  15. 1 row in set (0.00 sec)
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)