Clipper/FiveWin - Comparacion de numeros

 
Vista:

Comparacion de numeros

Publicado por Antoni Masana (168 intervenciones) el 04/04/2007 12:56:14
Utilizo Clipper 5.2 y he comprobado que clipper tienes problemas para comparar por igualdad dos campos numericos cuando los valores son muy grandes (más de siete digitos) y/o con cierto numero de decimales.

Pierde precision y aunque muestra los mismos valores en los campos no es capaz de decir que son iguales.

Por ejemplo:

n_Cant :=987654321.12345
n_Valor:=987654321.12345

IF n_Cant == n_Valor
ALERT("Son iguales")
ENDIF

El ALERT no se ejecuta. La solución que utilice fue esta:

c_Cant :=STR(987654321.12345, 15, 5)
c_Valor:=STR(987654321.12345, 15, 5)

IF c_Cant == c_Valor
ALERT("Son iguales")
ENDIF

Ahora si funciona.

¿ Alguien tiene alguna explicación. ?

Un saludo a todos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Comparacion de numeros

Publicado por Mauricio Arevalo (152 intervenciones) el 04/04/2007 15:43:25
Antoni:

No es un error de clipper, lo que tu estas mencionando se llama PUNTO FLOTANTE, es decir internamente los numeros con sus decimales son diferentes (aproximaciones), eso pasa en excell o cualquier otro lenguaje..

La segunda opción te funciona porque estas definiendo un tamaño maximo del numero que es entero 15 y decimales maximo 5 lo que hace que clipper redonde los decimales y por consiguiente seran iguales, es similar cuando en EXCELL utilizas la funcion ROUND() o REDONDEAR()

Esto explicado en palabras entendibles, porque hay una explicación más técnica en donde entrariamos hablar de la operación de los números binarios, etc...

Saludos

Mauricio Arevalo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar