Pregunta: | 57856 - ERROR EN FUNCION INTEGER |
Autor: | Susana Llaguno |
Tengo la siguiente fórmula para truncar a dos decimales imp_truncado=int(importe)+(int((importe-int(importe))*100)/100)
como función dentro de un formulario en Visual Fox 6.0. En algunas ocasiones me resta un centavo. Por ejemplo 8569.47 me da como resultado 8569.46 Si corro la misma fórmula en el área de comandos me da el resultado correcto, pero ya dentro del formulario me resta el centavo. Descompuse la fórmula en partes de la siguientes manera: x=importe entero=int(x) && entero=8569 decimales=x - entero && decimales=8569.47 - 8569 = 0.47 ent_dec=decimales * 100 && ent_dec= 0.47 * 100 = 47 fraccion=int(ent_dec) && fraccion=int(47) = 46 (error) conv_dec=fraccion / 100 && conv_dec=46 / 100 = .46 final=entero+conv_dec && final=8569 + 0.46 = 8569.46 y el error da cuando calculo la variable 'fraccion'. No siempre pasa, solo en algunos casos, en un reporte de 82 cálculos solo uno me da incorrecto. Probé con la función FLOOR y también me da error. y=FLOOR(ent_dec) && y=46 Si alguien tiene idea de lo que ocurre le agradecería me lo haga saber. |
Respuesta: | Martin Mendoza |
Buenas.
Yo resolví el problema del truncado de esta forma y no tuve inconvenientes. Truncado a 2 Decimales, con TRANSFORM(,'99999...') convierto a texto el numero y solo tomo los enteros y evito que haga un redondeo automático, con VAL(...) lo convierto otra vez en número y al dividir corro la coma donde estaba. x = 25.566996 y = 100 && posiciones decimales. (2 en este caso) s=VAL(TRANSFORM((x * y),'99999999999'))/y Resultado es 25.56 truncado Espero te sirva. Saludos |
Respuesta: | Juan Manuel Borruel |
Has probado con?
int(importe*100)/100 |