Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   "Not a valid floating point value" (https://www.clubdelphi.com/foros/showthread.php?t=51317)

david.rguez 12-12-2007 13:33:49

"Not a valid floating point value"
 
Hola a todos/as:

A ver si podéis ayudarme con este error, que me trae de cabeza ya. Tengo en una BBDD SQL Server una tabla que contiene posibles valores que puede tomar la capacidad de una botella.

Al introducir un registro representando una botella, el usuario tiene que indicar la capacidad de la misma; la cuál tiene que aparecer reflejada en la tabla anterior.

En el Validate del campo correspondiente en el DBgrid que utilizo, le tengo puesto un locate contra la tabla para averiguar si dicho valor está o no está.
Pues bien, ese valor es un tipo "float" y me ocurría (es la primera vez que me ocurre y no sé qué diferencia puede haber con otras veces) que aunque introduzca un valor correcto, el Locate me devuelve false (con lo que salta el mensaje de error que le tengo definido en el código fuente).

Probé a especificar explícitamente antes del locate: DecimalSeparator:=','
Pero no solucionó nada, seguía dando el mismo problema.

Probé a poner un punto (.) en lugar de una coma (,) y aquí empezó a rizarse más el rizo: el DBGrid no me permite poner puntos directamente (si puslo el punto, no escribe nada). Si le pongo la coma al introducir el valor (teniendo incluso el separador como punto), la primera vez me convierte automáticamente la coma en un punto y lo guarda correctamente.

Pero si, posteriormente, quiero modificar ese valor; ya no realiza esa conversión, sino que me salta el siguiente error:
Código PHP:

Project xxxxxx raised exception class EDatabaseError with message ''0,75' is not a valid floating point value for field 'Capacidad'' 

¿Alguna idea de por qué ocurre eso? Yo entiendo el error, lo que no entiendo es por qué la primera vez lo transforma a punto y la segunda ya me da el error (aparte de que tampoco logro comprender por qué el locate no funciona correctamente antes que todo eso).

Un saludo y gracias:

David Rguez.

david.rguez 12-12-2007 13:36:44

Errata: el Validate es del ADOTable, no del DBGrid.

Lepe 12-12-2007 13:42:57

Supongo usas un campo de tipo double Precision, y este tipo de datos no son muy exactos, si guardas el valor 21.35, internamente se guardará como 21.34999999 ; cuando buscas 21.35 con Locate, no encontrará ese valor. Normalmente se soluciona cambiando el tipo de dato del campo a Numeric o Decimal, pero deberás mirar la documentación de SQL Server a ese respecto.

Si quieres que el punto (el que está en el teclado numérico) se use como una coma, mira este hilo, de hecho, para asignar un valor a sysutils.DecimalSeparator debes hacerlo al principio de la aplicación para que funcione correctamente.

Saludos


La franja horaria es GMT +2. Ahora son las 05:25:35.

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