Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-01-2006
piccolo2101 piccolo2101 is offline
Miembro
 
Registrado: oct 2005
Posts: 63
Poder: 19
piccolo2101 Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 23-01-2006
AFilth AFilth is offline
Miembro
 
Registrado: ago 2005
Posts: 119
Poder: 19
AFilth Va por buen camino
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.
Responder Con Cita
  #3  
Antiguo 23-01-2006
piccolo2101 piccolo2101 is offline
Miembro
 
Registrado: oct 2005
Posts: 63
Poder: 19
piccolo2101 Va por buen camino
Thumbs up

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.
Responder Con Cita
  #4  
Antiguo 02-02-2006
Sinonimo Sinonimo is offline
Registrado
 
Registrado: feb 2006
Posts: 5
Poder: 0
Sinonimo Va por buen camino
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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
precision en valores float el_barto Conexión con bases de datos 2 09-09-2005 06:22:52
Cambio de motor de BD adlfv Conexión con bases de datos 1 06-06-2005 20:01:04
Problema DBExpress muy lento argami Conexión con bases de datos 4 22-06-2004 19:34:18
Campos Float en Firebird Kira SQL 7 12-02-2004 17:06:45
Precision en los campos float xerkan Firebird e Interbase 1 05-12-2003 12:31:47


La franja horaria es GMT +2. Ahora son las 19:00:21.


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
Copyright 1996-2007 Club Delphi