Página 1 de 1

Desde cuando andara mal esto en xHarbour?

Publicado: Sab Oct 03, 2009 12:50 am
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.

Desde cuando andara mal esto en xHarbour?

Publicado: Sab Oct 03, 2009 12:54 am
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

Desde cuando andara mal esto en xHarbour?

Publicado: Sab Oct 03, 2009 3:48 am
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

Desde cuando andara mal esto en xHarbour?

Publicado: Sab Oct 03, 2009 8:46 am
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

Desde cuando andara mal esto en xHarbour?

Publicado: Lun Oct 05, 2009 9:30 am
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.