Datos iguales pero distintos

Utilizo VB 5.0 profesional.
A mi me llegan los datos en fichero *.txt de los cuales cada línea es un registros (existen 3 tipos distintos de registros).
Abro estos ficheros *.txt FOR INPUT.
Para obtener los datos vuelco en una variable_linea cada línea con LINE INPUT de la que leo los campos de los registros con la función MID.
Uno de los datos que tengo que comprobar es que el contenido de un campo_A multiplicado por el contenido de un campo_B sea igual al contenido de un campo_C. (Todos ellos son numéricos con posiciones decimales)
Para ello, leo las posiciones correspondientes a los tres campos de la variable_linea y las vuelco en sendas variables (A, B y C) del tipo DOUBLE
En otra variable_D (DOUBLE) multiplico variable_A por variabla_B
El resultado lo compara con variable_C.
Pregunta:
Si realizo:
IF NOT VARIABLE_C = VARIABLE_D THEN
proceso_no_coinciden
END IF
Cuando el contenido de las variables es diferentes realiza el "proceso_no_coinciden", pero, a veces, siendo el resultado igual (es decir que variable_C es igual a variable_D) también realiza el "proceso_no_coinciden".
¿Por qué, si todas las variables son DOUBLE, pasa esto? ¿Qué ocurre? ¿Dónde falla?
Gracias y perdón por el ladrillo

1 Respuesta

Respuesta
1
Conozco ese efecto y es muy desesperante.
El problema es que cuándo operas con variables de doble presión la igualdad sólo se cumple cuando los valores son realmente iguales, hasta la 14a cifra decimal. Como partes de valores que no tienen esa precisión, a veces la igualdad no se cumple.
SOLUCIÓN: no pongas nunca una condición :
IF VARIABLE_C = VARIABLE_D THEN....
Ponlo así:
IF ABS(VARIABLE_C - VARIABLE_D) < 0,00000001 THEN.....
Con esto la condición será cierta aunque por el tema de la precisión los valores difieran ligerísimamente. El número de ceros lo puedes ajustar según sea el orden de los valores a comparar.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas