La Web del Programador: Comunidad de Programadores
 
    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