Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-12-2011
Oscar Guzmán Oscar Guzmán is offline
Miembro
 
Registrado: oct 2008
Ubicación: Caracas-Venezuela
Posts: 79
Poder: 16
Oscar Guzmán Va por buen camino
Convertir un texto de un edit en un número con decimales

Hola a todos y feliz navidad!

tengo un número ingresado en un Edit, por ejemplo: 1.540,65 que posteriormente va a ser pasado a una función de monto escrito para obtener el número en letras, si trato de convertirlo con StrToFloat no me acepta el punto de mil y si trato de hacerlo con la función VAL entonces si me toma el punto de mil pero no los decimales, es decir, me dice que el número es 1.540 (como si fuese entero) he tratado con otros métodos, como la variable DecimalSeparator y otras cosas pero no logro obtener el número completo con sus decimales para poderlo pasar a la función de monto escrito y agradecería vuestra ayuda.

Gracias.
__________________
Oskar
Responder Con Cita
  #2  
Antiguo 28-12-2011
Avatar de TiammatMX
TiammatMX TiammatMX is offline
Miembro
 
Registrado: jun 2006
Ubicación: Universo Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Puebla\Heróica Puebla de Zaragoza\Jardines de San Manuel\Home
Posts: 746
Poder: 18
TiammatMX Va camino a la fama
Cita:
Empezado por Oscar Guzmán Ver Mensaje
...tengo un número ingresado en un Edit, por ejemplo: 1.540,65 que posteriormente va a ser pasado a una función de monto...
Por la forma de presentación (puntos, comas), más bien tiene que ver con la definición general de Windows..., si pruebas a cambiar a un formato más "agringado" (999,999.99 por ejemplo) seguramente StrToFloat() te servirá de maravilla. O en todo caso, darle una "preconversión" a ése formato ANTES de procesarlo con la función.

Suerte.
__________________
Felipe Eduardo Ortiz López. Delphi programmers does it recursively...

"Un programador, es un creador de universos en donde sólo él es responsable. Universos de complejidad prácticamente ilimitada que se puede crear en forma de programas de ordenador." - Joseph Weizenbaum.

Témele a los profetas... y a aquellos que están listos para morir por "la verdad", ya que como regla general hacen morir a muchos otros con ellos, frecuentemente antes que ellos, y a veces en lugar de ellos. — Umberto Eco
Responder Con Cita
  #3  
Antiguo 28-12-2011
Oscar Guzmán Oscar Guzmán is offline
Miembro
 
Registrado: oct 2008
Ubicación: Caracas-Venezuela
Posts: 79
Poder: 16
Oscar Guzmán Va por buen camino
Tiammat, gracias por tu respuesta pero ya probé de esa manera y no me funcionó y aunque así funcionara tampoco estaría bien porque tengo que pasar ese formato a una función de monto escrito que me va a convertir la cifra en letras y lo haría entonces de forma errónea.

Se te ocurre otra idea?
__________________
Oskar
Responder Con Cita
  #4  
Antiguo 28-12-2011
Avatar de TiammatMX
TiammatMX TiammatMX is offline
Miembro
 
Registrado: jun 2006
Ubicación: Universo Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Puebla\Heróica Puebla de Zaragoza\Jardines de San Manuel\Home
Posts: 746
Poder: 18
TiammatMX Va camino a la fama
Cita:
Empezado por Oscar Guzmán Ver Mensaje
Tiammat, gracias por tu respuesta pero ya probé de esa manera y no me funcionó y aunque así funcionara tampoco estaría bien porque tengo que pasar ese formato a una función de monto escrito que me va a convertir la cifra en letras y lo haría entonces de forma errónea.

Se te ocurre otra idea?
Siempre se me ocurren ideas... Practicarlas y hacerlas funcionar, es otro cantar...

Usa un TMaskEdit, y al procesar tu función de "poner en palabras tus numeritos" tomas el Value del TMaskEdit...
__________________
Felipe Eduardo Ortiz López. Delphi programmers does it recursively...

"Un programador, es un creador de universos en donde sólo él es responsable. Universos de complejidad prácticamente ilimitada que se puede crear en forma de programas de ordenador." - Joseph Weizenbaum.

Témele a los profetas... y a aquellos que están listos para morir por "la verdad", ya que como regla general hacen morir a muchos otros con ellos, frecuentemente antes que ellos, y a veces en lugar de ellos. — Umberto Eco
Responder Con Cita
  #5  
Antiguo 29-12-2011
Oscar Guzmán Oscar Guzmán is offline
Miembro
 
Registrado: oct 2008
Ubicación: Caracas-Venezuela
Posts: 79
Poder: 16
Oscar Guzmán Va por buen camino
Unhappy

No, lo he probado y no me funciona, el valor que tengo que pasar a la función de letras tiene que ser real, no me acepta que le pase directamente un string desde un maskedit o desde un edit, por eso tengo que convertirla con strToFloat o con val, pero con strtofloat no logro que tome el punto de los miles y con VAL no me toma los decimales y no veo otra función que lo haga.

Por supuesto que sé que esta no es la primera vez que pasa eso, pero no encuentro nada en los foros, veo que todo el mundo que necesita convertir a real un número desde un edit siempre maneja valores por debajo de mil, por lo que no tienen el problema del punto.
__________________
Oskar
Responder Con Cita
  #6  
Antiguo 29-12-2011
Avatar de TiammatMX
TiammatMX TiammatMX is offline
Miembro
 
Registrado: jun 2006
Ubicación: Universo Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Puebla\Heróica Puebla de Zaragoza\Jardines de San Manuel\Home
Posts: 746
Poder: 18
TiammatMX Va camino a la fama
Cita:
Empezado por Oscar Guzmán Ver Mensaje
No, lo he probado y no me funciona, el valor que tengo que pasar a la función de letras tiene que ser real, no me acepta que le pase directamente un string desde un maskedit o desde un edit, por eso tengo que convertirla con strToFloat o con val, pero con strtofloat no logro que tome el punto de los miles y con VAL no me toma los decimales y no veo otra función que lo haga.

Por supuesto que sé que esta no es la primera vez que pasa eso, pero no encuentro nada en los foros, veo que todo el mundo que necesita convertir a real un número desde un edit siempre maneja valores por debajo de mil, por lo que no tienen el problema del punto.
Si usas las librerías JEDI, tienen un componente que funciona como TMaskEdit y que te toma CUALQUIER valor que tenga. Una idea más...
__________________
Felipe Eduardo Ortiz López. Delphi programmers does it recursively...

"Un programador, es un creador de universos en donde sólo él es responsable. Universos de complejidad prácticamente ilimitada que se puede crear en forma de programas de ordenador." - Joseph Weizenbaum.

Témele a los profetas... y a aquellos que están listos para morir por "la verdad", ya que como regla general hacen morir a muchos otros con ellos, frecuentemente antes que ellos, y a veces en lugar de ellos. — Umberto Eco
Responder Con Cita
  #7  
Antiguo 29-12-2011
Avatar de Cañones
Cañones Cañones is offline
Miembro
 
Registrado: ene 2007
Ubicación: La Paz Entre Ríos
Posts: 354
Poder: 18
Cañones Va por buen camino
No entendí bien. El problema es el punto? que en el edit no pongan punto, si ponen, que alguna funcion lo quite y listo.
Saludos.
Responder Con Cita
  #8  
Antiguo 29-12-2011
Oscar Guzmán Oscar Guzmán is offline
Miembro
 
Registrado: oct 2008
Ubicación: Caracas-Venezuela
Posts: 79
Poder: 16
Oscar Guzmán Va por buen camino
gracias por las respuestas

Lo que sucede es que el punto tiene que ir porque aparte de que va a la función de monto escrito también va a una hoja para de qreport para posteriormente imprimir esos datos en un cheque y si el punto no está el cheque no sirve
__________________
Oskar
Responder Con Cita
  #9  
Antiguo 29-12-2011
Avatar de Cañones
Cañones Cañones is offline
Miembro
 
Registrado: ene 2007
Ubicación: La Paz Entre Ríos
Posts: 354
Poder: 18
Cañones Va por buen camino
Sigo sin entender bien que es lo que pasa.
Cuando se crea mi aplicación lo que hago es esto para no tener problemas con los separadores.

Código Delphi [-]
DecimalSeparator:=',';
DateSeparator:='/';
Application.UpdateFormatSettings:=false;
Responder Con Cita
  #10  
Antiguo 29-12-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Oscar.

Al igual que Cañones, no entiendo el resultado que esperas. Pero si en algún momento deseas almacenar como número real la cadena '1.540,65', al momento de la conversión, va a tener que tener el formato '1540.65' sí o sí. Ya que ese es el formato de representación interna que admite Delphi (y los lenguajes que conozco).
Como lo muestres es otro cantar... En el foro C++ Builder se trato un tema similar: Error de conversion.

Probá de este modo:
Código Delphi [-]
function CadenaAFlotante(Cad: string): Double;
var
  Sep: Char;
begin
  Sep:= DecimalSeparator;
  Delete(Cad, Pos('.', Cad), 1);
  Cad:= AnsiReplaceStr(Cad, ',', '.');
  DecimalSeparator:= '.';
  Result:= StrToFloat(Cad);
  DecimalSeparator:= Sep;
end;

Ejemplo de llamada:
Código Delphi [-]
...
var
  Valor: Double;
begin
  Valor:= CadenaAFlotante(Edit1.Text);
  ShowMessage(FloatToStr(Valor));
end;
Pero como te dije arriba no alcanzo a entender lo que buscas...

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #11  
Antiguo 29-12-2011
Oscar Guzmán Oscar Guzmán is offline
Miembro
 
Registrado: oct 2008
Ubicación: Caracas-Venezuela
Posts: 79
Poder: 16
Oscar Guzmán Va por buen camino
Ecfisa,
Gracias por tu respuesta y las otras de los demás usuarios del foro

Trataré de replantear mi problema, es posible que no haya sabido explicarme. Tengo una pequeña aplicación y recientemente tuve que crear una forma para colocar datos para la impresión de un cheque a través de edit, no se guarda nada en la base de datos, es solo para pasar esa información a un formulario de qreport5 y posteriormente imprimir esa info en un cheque.

La cifra que ingresa el usuario en el edit, digamos 1.567,40 por ejemplo, yo la debo pasar una función para que se convierta a su expresión equivalente en letras o monto escrito como cuando haces un cheque que tienes que escribir el monto también en letras, bien?, la función de monto escrito trabaja perfectamente, el problema que tengo es convertir el texto del edit en un valor tipo float o real para poder pasar la información a la función de monto escrito. Si uso StrToFloat no me acepta el punto de de mil, pareciera que solo acepta la coma de los decimales y si uso VAL me acepta el punto de Mil pero no me toma en cuenta los decimales a pesar de que estoy usando una variable de tipo Real en la función VAL. He buscado en internet y no he podido encontrar nada al respecto y también aquí, por eso decidí preguntar. Yo no soy un programador muy experimentado, tal vez para otros sea algo muy sencillo pero no he logrado hacerlo :|

Antes me dijeron que no colocara el punto en el edit, pero esa solución no es viable ya que la cifra tiene que llegar al formulario del qreport con su punto de forma que salga impresa en el cheque. Sin embargo que ahora que me indicas que delphi tiene que tratar esos valores SIN el punto, es decir, 1567,40 entonces me pregunto como voy después a colocar el punto en la posición apropiada si lo quito según lo que me explicas? de todas voy a usar las instruccíones que me colocaste a ver que tal

de cualquier forma muchas gracias
y escribo luego de hacer las pruebas
__________________
Oskar
Responder Con Cita
  #12  
Antiguo 29-12-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Oscar.
Cita:
el problema que tengo es convertir el texto del edit en un valor tipo float o real para poder pasar la información a la función de monto escrito. Si uso StrToFloat no me acepta el punto de de mil, pareciera que solo acepta la coma de los decimales y si uso VAL me acepta el punto de Mil pero no me toma en cuenta los decimales a pesar de que estoy usando una variable de tipo Real en la función VAL.
En ese caso creo que la función que te puse arriba te va a servir.

Cita:
Sin embargo que ahora que me indicas que delphi tiene que tratar esos valores SIN el punto, es decir, 1567,40
No me debo haber explicado bién, Delphi aceptará valores CON punto (1567.40) y no con coma.



Un saludo y tenenos al tanto de como lo vas solucionando.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #13  
Antiguo 29-12-2011
Oscar Guzmán Oscar Guzmán is offline
Miembro
 
Registrado: oct 2008
Ubicación: Caracas-Venezuela
Posts: 79
Poder: 16
Oscar Guzmán Va por buen camino
Buenos días Ecfisa,

Ya está resuelto, lo que hice fue copiar el contenido del edit en una variable aparte a la cual le quité el punto con la el procedimiento Delete y la función POS que me mostraste, modificándolas un poco y posteriormente con el resultado obtenido se lo pude pasar a la función de monto escrito a través de StrToFloat. El monto ingresado por el usuario no lo toqué de forma que permaneciera siempre con su punto y pasara tal cual al formulario del qreport y eso fue todo:

Delete(Cifra,Pos('.',Cifra),1);
MontoEscrito(StrToFloat(Cifra));

Gracias por la ayuda y por el tiempo tomado
Saludos
__________________
Oskar
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
¿Hay alguna función ya hecha para comprobar si un texto se puede convertir a número? noob Varios 7 05-12-2008 01:44:24
Dos decimales en un Edit RoyTan Varios 8 03-02-2008 16:38:44
Número con decimales blueicaro OOP 5 01-11-2007 11:16:40
Numero con dos decimales zvf OOP 9 07-04-2006 20:27:06
Convertir decimales a radianes Picard C++ Builder 6 05-06-2004 11:43:47


La franja horaria es GMT +2. Ahora son las 23:12:11.


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