![]() |
guardar text como un float
Hola he estado teniendo unos problemas en la forma de mostrar cierta informacion.
En un TEdit, tengo una rutina que agrega los puntos separadores de mil. La idea es grabar en una tabla el texto escrito en el TEdit. El campo en donde se guarda el el registro lo defini como number con 2 decimales... ahora bien cuando trato de guardar el el contenido me tira un error. Código:
ibtable1.fieldbyname('monto').asfloat:=strtofloat(sedit1.text) alguna idea.... |
Hola, primero que todo tipo de base de datos usas? generalemente se usan campos tipo Double o Float no Numero.
Saludos. |
Puede que sea Numeric.
¿Cuál es el error que te da? ¿No será algo de puntos y comas? |
Hola
Cita:
Cita:
Cita:
Saludos |
Utilizo Firebird 2.0.1... Cambie el campo a double precision
me dice : '15.202 is not a valid floating point value' al parecer tengo que sacarle el punto separador de los miles... o exite otra forma de grabar el registro directamente? |
Hola
Usas windows? Si es asi el problema esta en la configuracion regional. Saludos |
La otra opción, para no alterar la configuración es emplear la variable DecimalSeparator.
Código:
DecimalSeparator := '.'; Saludos, |
hola... le cambie el formato separador de los decimales a '.' y funciono.
Pero por ejemplo cuando escribo 1.000 (MIL, no uno coma cero cero cero)... me lo toma como 1... igual quiero que me mantenga el punto separador de los miles (.) y que me lo diferencie de la coma decimal como si fuera una coma.... se puede lograr eso?? Gracias aqui les agrego la rutina que utilizo para agregar punto de los miles En el eveto onChenge del TEdit Código:
var |
Hola
Yo creo que lo que pretendes es que lq presentacion sea con un punto en los miles y me parece bien, pero por que grabarlos de esa forma?. No creo que el campo de la base de datos lo acepte, no se? Saludos |
Efectivamente, el amigo Caral tiene razón. Una cosa es el formato de presentación y otra lo que se guarda en una base de datos.
mjjj, No puedes hacer que guarde con los puntos de miles. Ne to lo aceptará. Lo que guardes en cualquier base de datos debe estar expresado sin separadores de miles, el único separador permitido es el decimal. Pues es el necesario para distinguir la parte entera de la decimal. La otra opción, si queres guardarlo con los separadores de miles es que lo guardes con formato VARCHAR. Pero si después debes recuperarlo y realizar operaciones tendrás que quitarles los puntos. y transformar dicho valor. Por otro lado... ¿De que manera lo estás insertando? Dependiendo de esto te podremos sugerir alternativas para conseguir lo que buscas. Saludos, |
justamente eso es lo que me pasa... por lo tanto dejo los campos como varchar.
Ahora bien... para solucionar todos mis problemas, necesito 2 rutinas... aer si me pueden dar una manito... 1) que me agregue los puntos separadores de los miles automaticamente al ingresar cierto numero en un TEdit. y que al presionar el punto del teclado numerico que agrege la coma decimal, representada como una coma (,). 2) una rutina que me transforme un string, por ejemplo (25.006,67) al numero real que corresponda y asi poder hacer calculos con el. para esto yo utilizaba, la siguiente rutina, pero en la cual no existian la coma deciamal Cita:
Aer si es que me pueden ayudar.. muchas gracias |
Hola
Me parece que te equivocas al dejar el campo como varchar, para mi lo correcto es que sea float, ya veras en las peripecias que te metes en cuanto necesites hacer algun calculo con ese campo, es mi opinion. Yo en la particualr lo que haria: Dejo el campo float (doble). Dejo que se introduzcan los numeros sin punto de mil (lo uso asi y no tengo ningun problema). Y graba los datos tal cual son, osea dobles y con punto decimal (modificando la configuracion reginal, que no tiene gran ciencia). Es nada mas mi opinion. Saludos |
Cita:
Saludos. |
gracias por todo... al final deje la el registro como un double presicion y todo funciona perfecto...
una ultima cosa.... cuando utilizo el ibexpert para revisar la tabla me aparece un registro asi: 1.500,56... perfecto tal como yo lo queria, pero cuando utilizo un TDbgrid para mostrar la informacion me aprece asi: 1500,56... sin el punto separador de los miles... se puede hacer algo con eso???? gracias |
Hola
Hay un dicho que dice: Si funciona, mejor ni lo toco, luego lo rompo.:D;) Por lo menos a mi me pasa.:D:D Saludos |
Hola en el display format de los campos persistentes de los IbExperts puedes poner una mascara de esta forma #.##0,00.
Saludos. |
.... no entendi nada... explicame con un poco mas de detalle porfa...
mi tabla se llama compras... y el campo monto Utilizo el IBExpert ... lo otro... estoy grabando un registro en la tabla compras, registro monto... de la siguiente manera[code] Código:
ibtable1.fieldbyname('monto').asfloat:=strtofloat(sedit1.text) ; alguien tiene una idea de como quitarle el punto... espero me puedan ayudar.... y muchas gracias por su tiempo |
¿Usas campos persistentes?
Hola.. enecumene tiene razón... No obstante, por lo que estoy viendo de tu código, me parece que no estás usando campos persistentes, no sé si por desconocimiento o por imposibilidad (porque no sepas en modo de diseño que campos va a tener la tabla), pero échale un ojo. Si usas campos persistentes tienes la posibilidad de usar las propiedesdes DisplayFormat y EditMask para indicar al delphi como controlar la visualización y edición de tus campos numéricos. Si necesitas hacer algo más complejo, te vas a los métodos OnGetText y OnSetText, y ahí podrás hacer lo que quieras, pero para el tratamiento de floats normales, incluso del tipo currency, te bastará con manejarte con las propiedades.
Saludos. |
La franja horaria es GMT +2. Ahora son las 04:54:34. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi