problema de redondeo campo currency

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • dayanareyes
    Member
    • jul
    • 36

    #1

    problema de redondeo campo currency

    hola, buenas tardes.

    tengo un problema, tengo unos campos moneda que piden que los divida por 1000 (por un ajustes y nuevo tipo de moneda q están implantando en el cliente).

    estoy usando este código tipo.

    if VBRK-WAERK = 'EU5'.
    if campo < 0.
    campo = abs( campo / 1000 ) * ( -1 ).
    ELSE.
    campo = abs( campo / 1000 ).
    ENDIF.
    ENDIF.

    esto lo use antes con el "abs" para q me pintara en un smartforms el valor sin redondearlo.

    ahora aplico esto mismo en un programa y no me funciona, me redondea... y yo quiero el valor tal cual...

    ejemplo:

    tengo el campo wa_datos-impuesto (que es de tipo MWSBP CURR 13 2)


    if wa_datos-impuesto < 0.
    wa_datos-impuesto = ( wa_datos-impuesto / 1000 ) * ( -1 ).
    ELSE.
    wa_datos-impuesto = abs( wa_datos-impuesto / 1000 ).
    endif.

    el valor inicial de wa_datos-impuesto = 295.20
    por lo que el valor tras la division deberia ser 0,29

    PUES EL PORBLEMA ES QUE ME REDONDEA Y ME SACA 0,30

    ME PODÉIS AYUDAR???

    GRACIAS....
  • acesar
    Member
    • abr
    • 44

    #2
    Originalmente publicado por dayanareyes
    hola, buenas tardes.

    tengo un problema, tengo unos campos moneda que piden que los divida por 1000 (por un ajustes y nuevo tipo de moneda q están implantando en el cliente).

    estoy usando este código tipo.

    if VBRK-WAERK = 'EU5'.
    if campo < 0.
    campo = abs( campo / 1000 ) * ( -1 ).
    ELSE.
    campo = abs( campo / 1000 ).
    ENDIF.
    ENDIF.

    esto lo use antes con el "abs" para q me pintara en un smartforms el valor sin redondearlo.

    ahora aplico esto mismo en un programa y no me funciona, me redondea... y yo quiero el valor tal cual...

    ejemplo:

    tengo el campo wa_datos-impuesto (que es de tipo MWSBP CURR 13 2)


    if wa_datos-impuesto < 0.
    wa_datos-impuesto = ( wa_datos-impuesto / 1000 ) * ( -1 ).
    ELSE.
    wa_datos-impuesto = abs( wa_datos-impuesto / 1000 ).
    endif.

    el valor inicial de wa_datos-impuesto = 295.20
    por lo que el valor tras la division deberia ser 0,29

    PUES EL PORBLEMA ES QUE ME REDONDEA Y ME SACA 0,30

    ME PODÉIS AYUDAR???

    GRACIAS....
    Justamente son los decimales del campo...

    295.20 / 1000 = 0.2952 pero como son 2 decimales 0.295 pasa a 0.30.
    Si el resultado hubiese sido 0.294..., te hubiese quedado en 0.29.
    El redondeo que hace es correcto.

    Me parece que ante semejante división, necesital ponerle un decimal mas a wa_datos-impuesto....

    La otra es hacer el calculo en una variable con mas decimales y luego aplicar alguna función que trunque (no que redondee) los decimales a dicha variable asignando el resultado a wa_datos-impuesto...

    No se si existe dicha función...

    La otra es ...

    wa_datos-impuesto = ( trunc( wa_datos-impuesto / 10 ) * 10 ) / 1000 .

    Seguro que hay otras opciones mas...

    pero con todo esto vas a perder esos decimales que, sin conocer a fondo tu proceso, pueden darte un resultado incorrecto. Fijate si realmente está bien sacar esos valores...

    Comentario

    Trabajando...