Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Go Back   Foros Club Delphi > Bases de datos > Firebird e Interbase
Register FAQ Members List Calendar Guía de estilo Today's Posts

Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old 22/12/2005
wonder boy's Avatar
wonder boy wonder boy is offline
Miembro
 
Join Date: Mar 2004
Location: Argentina
Posts: 50
Poder: 23
wonder boy Va por buen camino
problemas con float y redondeos

hola amigos

espero puedan sacarme de esta!!!

antes de empezar, uso FB1.5 y D7

tengo una tabla por donde pasan todos los importes de una empresa, hasta ahora venia todo muy bien, tenia un campo IMPORTE de tipo FLOAT, pero debido a una diferencia de un centavo, me di cuenta que los importes que me devuelve y que guarda Firebird son erroneos, por ejemplo, si yo a este campo le pongo el valor 151171.90, firebird me agrega 0.006, o seaque me queda 151171.906 y si hago un SQL de esto me lo toma como 151171.91, y es ahi donde tengo el problema, si los importes no son tan grandes no tengo problemas. espero haber sido claro en mi explicacion...


desde ya muchas gracias
Reply With Quote
  #2  
Old 23/12/2005
OSKR's Avatar
OSKR OSKR is offline
Miembro
 
Join Date: Nov 2004
Location: San Cristóbal/Táchira/Venezuela
Posts: 389
Poder: 22
OSKR Va por buen camino
No he usado FireBird (en eso estoy), pero pudiera ser problema del IDE de la Borland q usas, yo he tenido esos mismos problemas con Builder (con los decimales especificamente) e incluso en la inicialización los decimales son distintos a los q le asigné y por otros medio de redondeo he solventado, lo mismo he probado con otros lenguajes en los cuales no ha habido este problema........¿Quién sabe porq?
__________________
Los Estados Unidos parecen destinados por la Providencia para plagar la América de miserias a nombre de la libertad."
Simón Bolívar
(Carta al Coronel Inglés Patricio Cambell 05/08/1829).
Reply With Quote
  #3  
Old 23/12/2005
wonder boy's Avatar
wonder boy wonder boy is offline
Miembro
 
Join Date: Mar 2004
Location: Argentina
Posts: 50
Poder: 23
wonder boy Va por buen camino
es cierto, ademas no se si te has dado cuenta qe en algun calculo entre un double y un variant, debes pasarlo a string con formatfloat, porque sino te dice que son distintos numeros, a pesar que los dos son igual a 0.00 (eso es a simple vista en realidad muchas veces son igual a 0.00000343213232)

bueno, si alguien quiere decir algo mas estare agradecido, al menos para que me acompañene en mi penar, jajajajajaja

saludos
Reply With Quote
  #4  
Old 23/12/2005
ASAPLTDA ASAPLTDA is offline
Miembro
 
Join Date: Jun 2003
Location: COLOMBIA-CALI
Posts: 639
Poder: 23
ASAPLTDA Va por buen camino
Float Vs Decimal

revisa la configuracion del bde
Reply With Quote
  #5  
Old 23/12/2005
wonder boy's Avatar
wonder boy wonder boy is offline
Miembro
 
Join Date: Mar 2004
Location: Argentina
Posts: 50
Poder: 23
wonder boy Va por buen camino
la verdad que no se que tocar!!!, pero por las dudas aclaro que uso DBEXPRESS, si me dicen que tocar en la configuracion del BDE (que no se si servira para lo que yo uso) diganme y hare la prueba

estoy abierto a escuchar mas opiniones

muchas gracias
Reply With Quote
  #6  
Old 26/12/2005
rastafarey's Avatar
rastafarey rastafarey is offline
Miembro
 
Join Date: Nov 2003
Posts: 927
Poder: 23
rastafarey Va por buen camino
Resp

Lo unico que te puedo decir es que e ptoblema no es de firebird quisas seas los componentes ueq uses
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa.
Reply With Quote
  #7  
Old 26/12/2005
jlcasih jlcasih is offline
Miembro
 
Join Date: May 2003
Location: Argentina
Posts: 54
Poder: 24
jlcasih Va por buen camino
Hola, mira creo te convendria definir el tipo de datos como un numeric(x,x) en vez de float para los montos para que puedas operar con mayor presicion. Yo he tenido muchos problemas con esto, lo que puedes hacer ya que no puedes cambiar lo hecho es redondear los valores cuando los obtienes, y en los store procedure castiarlos si operas en los mismos, acordate que tenes que tener en cuenta que sean del mismo tipo de dato. Espero te sirva. Saludos.
__________________
Cordoba-Argentina
Reply With Quote
  #8  
Old 26/12/2005
Lepe's Avatar
[Lepe] Lepe is offline
Miembro Premium
 
Join Date: May 2003
Posts: 7,424
Poder: 31
Lepe Va por buen camino
Exacto jlcasih De hecho en las guías de Firebird/Interbase no se recomienda el uso de FLOATS para aplicaciones contables ni similares.

El hecho es que dos floats, aunque sean iguales, puede tener distinta cantidad de números despues de la coma decimal, de ahí que "aparezcan" decimales de sobra, aún cuando se intente decirle que solo tenga 2 decimales.

saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Reply With Quote
  #9  
Old 26/12/2005
jhonny's Avatar
jhonny jhonny is offline
Jhonny Suárez
 
Join Date: May 2003
Location: Colombia
Posts: 7,070
Poder: 32
jhonny Va camino a la famajhonny Va camino a la fama
Aca muestro un articulo con las conclusiones que marteens saca al respecto del campo numeric http://www.marteens.com/trick25.htm, espero sirvan de algo y que a ustedes les ayude a sacar sus propias coclusiones
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Reply With Quote
  #10  
Old 27/12/2005
rastafarey's Avatar
rastafarey rastafarey is offline
Miembro
 
Join Date: Nov 2003
Posts: 927
Poder: 23
rastafarey Va por buen camino
resp

No se pero hasta donde se estos valores simpre tendran una precision del maximo soportdo por la base de datos.

Ha y los componenetes que uso son los ibobjects.
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa.
Reply With Quote
  #11  
Old 27/12/2005
Mick Mick is offline
Miembro
 
Join Date: May 2003
Posts: 405
Poder: 24
Mick Va por buen camino
Este tema es bastante recurrente en los foros, el problema no tiene que ver ni con firebird ni con los componentes, es una cuestion de como los computadores guardan la informacion con numeros en punto flotante: los ordenadores trabajan en formato binario (base 2) y numeros que tienen una representacion exacta en una determinada base (como por ejemplo base 10) no se pueden representar de forma exacta en otras (como base 2 que es como se guardan internamente los valores).

Aconsejo leer esta documentacion:

An Overview of Floating Point Numbers.

http://community.borland.com/article...,15855,00.html

En concreto la parte titulada:

"Round-Off Problems"

Saludos
Miguel
Reply With Quote
  #12  
Old 27/12/2005
wonder boy's Avatar
wonder boy wonder boy is offline
Miembro
 
Join Date: Mar 2004
Location: Argentina
Posts: 50
Poder: 23
wonder boy Va por buen camino
finalmente y para sacar una conclusion definitiva, habria que usar el tipo de datos decimal(n,m)??

gracias
por toda la info dedicada a este hilo
Reply With Quote
  #13  
Old 27/12/2005
Lepe's Avatar
[Lepe] Lepe is offline
Miembro Premium
 
Join Date: May 2003
Posts: 7,424
Poder: 31
Lepe Va por buen camino
No.

Me iba a quedar en esa palabra para que revisaras de nuevo la info dada... pero como no estamos en clase, y lo que se busca en un foro son respuestas, pues...

Decimal(10,m)
Numeric(10,m)

Da igual lo que eligas en escala, solo es para el número de decimales que quieras, 2, 3 o 6.

saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Reply With Quote
  #14  
Old 27/12/2005
wonder boy's Avatar
wonder boy wonder boy is offline
Miembro
 
Join Date: Mar 2004
Location: Argentina
Posts: 50
Poder: 23
wonder boy Va por buen camino
muchisimas gracias Lepe por tu respuesta, es la respuesta mas logica (cuando decis que deberia haber leido la info dada) y mas coherente (porque vas directo al grano)

muchas gracias de nuevo
Reply With Quote
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump


All times are GMT +2. The time now is 00:53.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi