In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Desde cuando andara mal esto en xHarbour?

Foro público de Xailer en español
Responder
Avatar de Usuario
Carlos Ortiz
Mensajes: 872
Registrado: Mié Jul 01, 2009 5:44 pm
Ubicación: Argentina - Córdoba
Contactar:

Desde cuando andara mal esto en xHarbour?

Mensaje por Carlos Ortiz »

1.13*3 = 3.39
xHarbour arroja que no es igual y algo se esta tragando.
Con valores pares anda bien pero con impares se los come.
Muchas gracias.
zeasoftware
Mensajes: 1831
Registrado: Mar Oct 11, 2005 9:53 am

Desde cuando andara mal esto en xHarbour?

Mensaje por zeasoftware »

es por los decimales, redondea a 2 decimas, me paso mucho con facturas en
cero con la comparacion:
If ( nTotal > 0.00 )
tuve que aplicar:
If ( Round(nTotal, 8,2) > 0.00 )
Saludos.
--
Ramón Zea
01.993.231-62-29
http://www.paginasprodigy.com/zeasoftware/
zeasoftware@prodigy.net.mx
zeasoftware@hotmail.com
ramonzea@yahoo.com
zeasoft.movil@hotmail.com
Avatar de Usuario
Carlos Ortiz
Mensajes: 872
Registrado: Mié Jul 01, 2009 5:44 pm
Ubicación: Argentina - Córdoba
Contactar:

Desde cuando andara mal esto en xHarbour?

Mensaje por Carlos Ortiz »

Gracias Ramón, hechamos manos al round, pero que raro que no hayan corregido
ese bug en xHarbour.
Muchas gracias.
"Ramón Zea" <zeasoftware@hotmail.com> escribió en el mensaje
news:[email=4ac684bd@svctag-j7w3v3j....]4ac684bd@svctag-j7w3v3j....[/email]
> es por los decimales, redondea a 2 decimas, me paso mucho con facturas en
> cero con la comparacion:
> If ( nTotal > 0.00 )
>
> tuve que aplicar:
> If ( Round(nTotal, 8,2) > 0.00 )
>
> Saludos.
> --
> Ramón Zea
> 01.993.231-62-29
> http://www.paginasprodigy.com/zeasoftware/
> zeasoftware@prodigy.net.mx
> zeasoftware@hotmail.com
> ramonzea@yahoo.com
> zeasoft.movil@hotmail.com
Xevi
Mensajes: 1706
Registrado: Jue Sep 08, 2005 12:58 pm

Desde cuando andara mal esto en xHarbour?

Mensaje por Xevi »

Ramón,
esto me ocurre por no leerme TODAS las funciones que dispone Clipper o
xHarbour.
Yo estoy utilizando esta "mezcla"
If ( Val( Str(nTotal,8,2) ) > 0.00 )
pero visto que se puede simplificar echando mano de Round()...
me tocara "limpiar" y dar un repaso a mi código
Un Saludo,
Xevi.
"Ramón Zea" <zeasoftware@hotmail.com> escribió en el mensaje
news:[email=4ac684bd@svctag-j7w3v3j....]4ac684bd@svctag-j7w3v3j....[/email]
> es por los decimales, redondea a 2 decimas, me paso mucho con facturas en
> cero con la comparacion:
> If ( nTotal > 0.00 )
>
> tuve que aplicar:
> If ( Round(nTotal, 8,2) > 0.00 )
>
> Saludos.
> --
> Ramón Zea
> 01.993.231-62-29
> http://www.paginasprodigy.com/zeasoftware/
> zeasoftware@prodigy.net.mx
> zeasoftware@hotmail.com
> ramonzea@yahoo.com
> zeasoft.movil@hotmail.com
Carlos Mora
Mensajes: 88
Registrado: Vie Jul 28, 2006 9:36 am

Desde cuando andara mal esto en xHarbour?

Mensaje por Carlos Mora »

Carlos,
> Gracias Ramón, hechamos manos al round, pero que raro que no hayan corregido
> ese bug en xHarbour.
creo que no lo van a arreglar porque no es en realidad un bug, sino un
problema propio de la representación numérica.
Imagí­nate que haces
a := 1/3; b := 1/6, c:= 1/6;
supuestamente, a - b - c te darí­a cero, pero prueba de hacerlo en una
calculadora de mano y verás que en la mayoria nos dará un 0.000000000001
o algo así­. Si usásemos un sistema base 3, no tendrí­amos ningún error.
Ese mismo problema de representación lo padece el formato que utiliza C
y la mayorí­a de los lenguajes para representar números, ya que el
formato DOUBLE de 8 bytes es uno de los formatos numéricos de las
funciones matemáticas de los procesadores.
En la oficina nos hicimos nuestro propio Round2() con una funcion como
la que usa Xevi.
FUNCTION Round2( nVal ); RETURN Val(Str(nVal, 2))
Con eso hemos resuelto la mayorí­a de los problemas.
Un saludo,
Carlos.
Responder