Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-12-2007
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 18
mjjj Va por buen camino
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)
pero esto no esta funcionando...

alguna idea....
Responder Con Cita
  #2  
Antiguo 19-12-2007
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
Hola, primero que todo tipo de base de datos usas? generalemente se usan campos tipo Double o Float no Numero.

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #3  
Antiguo 19-12-2007
Avatar de Gabo
[Gabo] Gabo is offline
Miembro Premium
 
Registrado: mar 2007
Ubicación: Murcia (España)
Posts: 684
Poder: 18
Gabo Va por buen camino
Puede que sea Numeric.

¿Cuál es el error que te da? ¿No será algo de puntos y comas?
__________________
Saludos,
Gabo

A menos que se indique lo contrario, el código estará hecho en C++Builder.
Responder Con Cita
  #4  
Antiguo 19-12-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Cita:
ibtable1.fieldbyname('monto').asfloat:=FloatToStr(sedit1.text)
o
Cita:
ibtable1.fieldbyname('monto').asString:=FloatToStr(sedit1.text)
o
Cita:
ibtable1.fieldbyname('monto').asString:=QuotedStr(sedit1.text)
Me parece que esta al revés, no se?
Saludos
Responder Con Cita
  #5  
Antiguo 19-12-2007
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 18
mjjj Va por buen camino
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?
Responder Con Cita
  #6  
Antiguo 19-12-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Usas windows?
Si es asi el problema esta en la configuracion regional.
Saludos
Responder Con Cita
  #7  
Antiguo 19-12-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
La otra opción, para no alterar la configuración es emplear la variable DecimalSeparator.

Código:
DecimalSeparator := '.';
Para mayor información, selecciona la variable y presiona F1.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #8  
Antiguo 19-12-2007
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 18
mjjj Va por buen camino
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
i : integer;
aux,aux2,cad : string;
begin
        cad:='0123456789';
        aux2:='';
        with (Sender as TEdit) do
        begin
          if text <> '' then
            begin
                aux:=text;
                if aux[1]='0' then delete(aux,1,1);
                for i:=1 to length(aux) do
                begin
                        if pos(aux[i],cad)>0 then aux2:=aux2+aux[i];
                end;
                i:=1;
                repeat
                        if (i mod 4=0) then Insert('.',aux2,length(aux2)-i+2);
                        inc(i);
                until (i>length(aux2));
                text:=aux2;
                SelStart:=length(aux2);
          end;
        end;
Responder Con Cita
  #9  
Antiguo 19-12-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
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
Responder Con Cita
  #10  
Antiguo 19-12-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
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,
__________________
Delphius
[Guia de estilo][Buscar]

Última edición por Delphius fecha: 19-12-2007 a las 19:58:30. Razón: Un poco de aclaraciones y mejorar la redacción.
Responder Con Cita
  #11  
Antiguo 19-12-2007
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 18
mjjj Va por buen camino
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:
begin
CADENA:=IBQUERY3.FieldByName('MONTO').ASSTRING;
result:=0;
for H:=1 to length(cadena) do
if cadena[H] in ['0'..'9'] then result:=result*10+ord(cadena[H])-48;
en donde cadena es un string y result es un integer... ahora lo que necsito es que me entregue un numero real.

Aer si es que me pueden ayudar.. muchas gracias
Responder Con Cita
  #12  
Antiguo 19-12-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
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
Responder Con Cita
  #13  
Antiguo 19-12-2007
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
Cita:
Empezado por Caral Ver Mensaje
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
Estoy totalmente de acuerdo con el amigo Caral, es algo complicado tratar con numeros en un campo varchar, yo tambien uso el campo como Double o Float como ya te habia comentado anteriormente.

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #14  
Antiguo 19-12-2007
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 18
mjjj Va por buen camino
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
Responder Con Cita
  #15  
Antiguo 19-12-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Hay un dicho que dice:
Si funciona, mejor ni lo toco, luego lo rompo.
Por lo menos a mi me pasa.
Saludos
Responder Con Cita
  #16  
Antiguo 19-12-2007
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
Hola en el display format de los campos persistentes de los IbExperts puedes poner una mascara de esta forma #.##0,00.

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #17  
Antiguo 19-12-2007
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 18
mjjj Va por buen camino
.... 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) ;
el problema es que el texto del sedit1 es or ejemplo: 15.256,56.... y eso no me lo agarra como un numero.

alguien tiene una idea de como quitarle el punto...

espero me puedan ayudar.... y muchas gracias por su tiempo
Responder Con Cita
  #18  
Antiguo 20-12-2007
afxe afxe is offline
Miembro
 
Registrado: jul 2004
Ubicación: Malaga-España
Posts: 273
Poder: 20
afxe Va por buen camino
¿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.
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
Guardar Edit.Text en un Txt Greco Varios 3 14-11-2007 23:47:19
guardar dbedit.text look OOP 3 22-09-2007 21:24:09
Guardar lo que tengo en un Edit1.text y edit2.text en una base de datos firebird jorgeluisc Conexión con bases de datos 1 23-04-2006 18:29:28
Como mostrar el HostName y El user en un text lazarous Varios 2 14-10-2005 14:42:20
Mostrar un Float como un hh:mm:ss rjsitruiz Impresión 2 04-07-2004 14:25:29


La franja horaria es GMT +2. Ahora son las 11:40:37.


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