Necesito redondear hacia arriba o hacia abajo a los dos valores decimales más cercanos en función del valor del tercer decimal. Redondea hacia arriba si el tercer decimal es mayor que 4. Redondea hacia abajo si es menor o igual a 4.

El siguiente SQL me daría los valores del tercer valor decimal y puedo redondear hacia arriba, pero la función de piso no parece cumplir con el requisito de redondear a los dos decimales más cercanos.

SELECT main,DIV1,CASE 
WHEN 
DIV1 > 4
THEN round(main,2)
ELSE
FLOOR(main)
end as result
 FROM (
select 1400/ 3.6735 AS main,abs(1400/ 3.6735) * power(10,3) % 10 as 'abs%10',abs(1400/ 3.6735) * power(10,3) % 10 DIV 1 as DIV1 
UNION
select 1200/ 3.6735 AS main,abs(1200/ 3.6735) * power(10,3) % 10 as 'abs%10',abs(1200/ 3.6735) * power(10,3) % 10 DIV 1 as DIV1 
UNION
select 9000/ 3.6735 AS main,abs(9000/ 3.6735) * power(10,3) % 10 as 'abs%10',abs(9000/ 3.6735) * power(10,3) % 10 DIV 1 as DIV1  )T;

El resultado de lo anterior es,

main      DIV1    result
381.1079    7      381.11
326.6639    3      326
2449.9796   9      2449.98

El resultado deseado es,

main      DIV1    result   desiredResult
381.1079    7      381.11     381.11
326.6639    3      326        326.66
2449.9796   9      2449.98    2449.98

dbfiddle

1
Bisoux 27 ago. 2020 a las 10:00

1 respuesta

La mejor respuesta

Desafortunadamente, floor y ceil de MySQL no aceptan un argumento de precisión como lo hace round. Pero puede emular este comportamiento multiplicando el valor por 100, superponiéndolo y luego dividiendo:

CASE 
WHEN 
div1 > 4
THEN CEIL(main * 100.0) / 100.0
ELSE FLOOR(main * 100.0) / 100.0
END
2
Mureinik 27 ago. 2020 a las 07:16