En el post anterior vimos que la diferencia de meses, pero regresa en decimales los decimales representan los días bueno puesn existen dos tipos de redondeos en Oracle hacia arriba y hacia abajo, Round redondea el digito de la derecha 0-4 hacia abajo, y si es 5 a 9 lo redondea hacia arriba por ejemplo 29.5 con round regresa 3 bueno pues truncate es como un redondeo hacia abajo es decir 29.5 con truncate seria 29, bueno menos palabras y más código.
Select round(8.5) From dual
Select trunc(8.5) From dual
domingo, 8 de mayo de 2011
Suscribirse a:
Enviar comentarios (Atom)
Este comentario ha sido eliminado por el autor.
ResponderEliminarcreate or replace
ResponderEliminarFUNCTION "ROUNDHACIAARRIBA" (
pImporte in number default -1
)
return number
as
/* ----------------------------------------------------------------------
* Nombre: ROUNDHACIAARRIBA
* Descripcion: Funcion que regresa el Precio Redondeado a 2 decimales
se base an el tercer decimal para evaluar si el redonde es hacia arriba
*
* Historial de revisiones:
* Fecha Id Cambio Descripcion
* ----------------------------------------------------------------------
* 12-Jun-18 implementacion inicial
*------------------------------------------------------------------------*/
lImporte number(38,3);
lRedondeoArriba boolean;
begin
lImporte:=0;
lRedondeoArriba:= false;
IF (INSTR(to_char(pImporte),'.')>0) THEN
BEGIN
--hacemos el redondeo a 3 decimales
select round(pImporte,3) into lImporte from dual;
--si el numero a redondear es tiene 3 decimales
IF(len(to_char(lImporte))-INSTR(to_char(lImporte),'.'))>=3 THEN
BEGIN
--checamos si el ultimo caracter es 5 le sumamos 0.005 para obligarlo a subir en el roud
IF substr(to_char(lImporte),len(to_char(lImporte)),1)='5' THEN
select round((lImporte+.0005),2) into lImporte from dual;
lRedondeoArriba:=true;
END IF;
END;
END IF;
EXCEPTION
WHEN OTHERS THEN
lRedondeoArriba:=false;
END;
END IF;