domingo, 8 de mayo de 2011

Redondeo hacia arriba y hacia abajo en Oracle

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

2 comentarios:

  1. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  2. create or replace
    FUNCTION "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;

    ResponderEliminar