Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Cambio de precisión en float (https://www.clubdelphi.com/foros/showthread.php?t=29456)

piccolo2101 23-01-2006 10:22:09

Cambio de precisión en float
 
Hola,

me pasa una cosa curiosa que escapa al alcance de mi razonamiento deductivo así que ahí dejo esto. Hago una inserción en una tabla de una BD SQL con servidor MSSQL donde el valor de algunos campos es tipo float y cuando pongo 20.54 (por ejemplo) el guarda 20.539999999999999. ¿Qué está pasando? ¿El sql transforma el formato? ¿Cómo se soluciona?

Un saludo y gracias.

AFilth 23-01-2006 11:08:38

A mí también me ha pasado alguna vez, es normal. Cuando pones que lo guarde en el SQL como un Float lo hace así, pero no te preocupes que cuando lo saques para operar con ello lo considera de nuevo un 20.54. Esto creo q es así porque en memoria se guarda con ese formato.
Si lo que quieres es verlo en las tablas dentro del SQL Server con ese formato podrías usar el tipo Numeric en vez de ese, especificando número de decimales que quieres y parte entera.
Un saludo.

piccolo2101 23-01-2006 11:30:44

Gracias. Ya había visto que lo recuperaba bien ya que delphi volvía a hacer el redondeo pero era por saber si había algo mal o era normal por los cambios en formatos delphi-sql.

Un saludo y nuevamente gracias.

Sinonimo 02-02-2006 19:10:53

Función Roundto
 
Para solucionar este problema, puedes utilizar la función roundto de delphi, en ella especificas cuántos decimales quieres.
Es cierto que cuando recuperas el número te devuelve el valor que deseas, pero podrías llegar a tener algunas situaciones un tanto molestas, como en el caso del 0, ya que si te guardara por ejemplo un número 0.0000000000000000001 (como a veces lo hace), y tú hicieras una consulta de los valores igual a 0, este registro quedaría excluído del dataset.
En la ayuda viene explicado cómo utilizar la función roundto, solamente te recuerdo que el número de decimales lo tienes que especificar en negativo. Ej.
roundto(myvar, -2);
Saludos!
Omar Gasca


La franja horaria es GMT +2. Ahora son las 04:47:05.

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