#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.... |
#2
|
|||
|
|||
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... |
Herramientas | Buscar en Tema |
Desplegado | |
|
|