Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Convertir un texto de un edit en un número con decimales (https://www.clubdelphi.com/foros/showthread.php?t=77165)

Oscar Guzmán 28-12-2011 23:04:15

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.

TiammatMX 28-12-2011 23:11:37

Cita:

Empezado por Oscar Guzmán (Mensaje 422094)
...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.;)

Oscar Guzmán 28-12-2011 23:36:09

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?

TiammatMX 28-12-2011 23:43:11

Cita:

Empezado por Oscar Guzmán (Mensaje 422094)
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... :p 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...

Oscar Guzmán 29-12-2011 00:03:38

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.

TiammatMX 29-12-2011 00:10:31

Cita:

Empezado por Oscar Guzmán (Mensaje 422098)
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...

Cañones 29-12-2011 00:30:03

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.

Oscar Guzmán 29-12-2011 00:46:01

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 :(

Cañones 29-12-2011 00:52:52

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;

ecfisa 29-12-2011 01:28:06

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.

Oscar Guzmán 29-12-2011 03:03:26

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

ecfisa 29-12-2011 04:24:15

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.

Oscar Guzmán 29-12-2011 16:56:11

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


La franja horaria es GMT +2. Ahora son las 16:29:07.

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