Clipper/FiveWin - comparar 2 campos numericos en clipper

 
Vista:

comparar 2 campos numericos en clipper

Publicado por jose (9 intervenciones) el 19/09/2004 02:52:30
hola,
tengo 2 campos que voy sumando a medida que me graban del debe y el haber en un programa de captura de partidas contables, solo uso dos decimales, la mascara es pict "#######.##" un campo se llama mdebe y el otro mhaber y al final del proceso el usario le da grabar, y verifico que los 2 campos esten iguales, sino es error, pero muchas veces, al hacer IF MDEBE<>MHABER entonces me marca error, pero si si van los valores correctos,le puse set exact on y lo mismo, entonces lo que hize es que los paso a string y luego hago la compracion y alli si me la hace bien. que puede ser.
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:comparar 2 campos numericos en clipper

Publicado por Gabriel Pascual (913 intervenciones) el 19/09/2004 08:40:53
No es ningun problema, la solucion que encontraste es la unica y la correcta, te explico porque:

Cuando trabajas con operaciones de punto flotante, tu computadora utiliza hasta 16 digitos decimales de aproximacion sin importar el SET EXACT, el PICTURE o cualquier otra forma de truncado de decimales, siempre la comparacion NUMERICA se hace sobre el total de digitos decimales, y estos nunca van a coincidir.

No es un problema de Clipper, TODOS los lenguajes de programacion que manejen punto flotante tienen el mismo problema. y la unica solucion es utilizar la conversion a cadena de caracteres y luego compararla.

De hecho, el almacenamiento de datos en los archivos DBFs sin importar el tipo de campo, se hace en forma de cadenas de caracteres, sin importar si los campos son numericos, logicos, cadenas, fechas o memo.
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

RE:comparar 2 campos numericos en clipper

Publicado por Armando Estrada Bucio (167 intervenciones) el 19/09/2004 17:13:18
José:

La forma en que yo lo hago es con la función ROUND() y a la fecha no he tenido problemas. Ejemplo

IF ROUND(mDebe,2) <> ROUND(mHaber,2)
. . . .
. . . .
ENDIF
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

RE:comparar 2 campos numericos en clipper

Publicado por jose (9 intervenciones) el 19/09/2004 18:48:04
fijate que probe el round asi como dices desde hace muchos años que he tenido este problemas, y siempre en muchos casos, dice que no son iguales, entonces opte por dejar eso string, pero ahora que estaba con tiempo libre me dije, preguntare para saber donde esta la clave de este problema, pero como dijo gabriel este problema es general, porque ahora que estoy programando todo de nuevo a Visual Basic, sucede lo mismo, e hize la misma medicina.
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