Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-01-2004
Letty Letty is offline
Miembro
 
Registrado: nov 2003
Ubicación: Galicia
Posts: 36
Poder: 0
Letty Va por buen camino
Otra vez dudas tontas

Hola de nuevo:
Tengo el siguiente problema:
Yo hago lo siguiente al pulsar un botón:

procedure TForm1.Button1Click(Sender: TObject);
var
numero : real;
st : string;

begin

st:= ednumero.Text;
st:= FormatFloat('#,##.00',strtofloat(st));
ShowMessage(st); //aquí muestra el mensaje perfectamente,todo muy bien
numero:= StrToFloat(st);

Y justo en el paso de string a float me da un error diciendo que ese no es un valor float [project project1.exe raised exception class eConvertError with message “1.000,00’ is not a valid floating point value’.Proccess stopped], yo no lo entiendo. A ver si me podéis ayudar por favor porque es algo rarísimo.
Gracias de antemano.
__________________
Letty
http://usuarios.lycos.es/buffangel
Responder Con Cita
  #2  
Antiguo 27-01-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 27
__cadetill Va por buen camino
Es normal, porque al ponerle el formato, le estás añadiendo el punto de los millares que, al hacer la transformación, no sabe que es.

Puedes hacer varias cosas:

1.- No pones en la máscara el punto de los millares (algo así 0.00)
2.- Te curras una función que te quite el separador de millares y que te haga (ya que estmamos) la conversión de tipos
3.- Accedes otra vez al componente para recuperar de nuevo el valor
Responder Con Cita
  #3  
Antiguo 27-01-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Disculpa cadetill pero a mi me parece que el error no está en FormatFloat sino en StrToFloat. De la ayuda de Delphi:

Cita:
Thousand separators and currency symbols are not allowed in the string
Es decir, StrToFloat sólo admite representaciones de números reales sin "adornos" com lo es el separador de miles.

// Saludos
Responder Con Cita
  #4  
Antiguo 28-01-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 27
__cadetill Va por buen camino
Quedas disculpado Román pero, yo no decía (o no pretendía decir) que el error fuera del FormatFloat. Si te fijas, decía en mi mensaje anterior :

Cita:
al hacer la transformación, no sabe que es
refiriendome a que era StrToFloat el que no sabía que hacer con esa cadena (como tu bien indicas, por los adornos puestos en el FormatFloat).

Por eso una de las coss que le sugería, era no poner los odornos (opción 1), para que StrToFloat supiera que hacer con el numerito en qüestión.

Nos leemos
Responder Con Cita
  #5  
Antiguo 28-01-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por cadetill
Por eso una de las coss que le sugería, era no poner los odornos (opción 1), para que StrToFloat supiera que hacer con el numerito en qüestión.
Disculpa nuevamente que difiera. Tú dijiste:

Cita:
Empezado por cadetill
No pones en la máscara el punto de los millares (algo así 0.00)
Y la máscara no afecta a StrToFloat.

// Saludos
Responder Con Cita
  #6  
Antiguo 28-01-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 27
__cadetill Va por buen camino
Cita:
Empezado por roman
Y la máscara no afecta a StrToFloat.
Bueno, no es del todo cierta esta afirmación. Me explico:

Suponiendo que el número a tratar es 1234.56

Si pongo una máscara tal que esta: #,##0.00 el FormatFloat nos devolverá un string tal que este 1.234,56, con lo que la función StrToFloat nos fallará debido a lo que ya se ha comentado

En cambio, si pongo una máscara tal que esta: 0.00, el FormatFloat nos devolverá un string así 1234,56 con lo que la función StrToFloat no nos fallará ya que es un número válido (sin adornos)

Repito que no es problema del FormatFloat (éste hace bien su trabajo), sinó de la manera de interpretar el string que se le pasa al StrToFloat.
Responder Con Cita
  #7  
Antiguo 28-01-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Ya nos estamos desviando .

Volvamos al mensaje #4 donde se nos informa:

Cita:
Empezado por compilador de Delphi
eConvertError with message “1.000,00’ is not a valid floating point value’
Esta excepción la manda StrToFloat y no FormatFloat. Es decir, el problema está antes de que FormatFloat intervenga, apenas se están valuando sus parámetros.

Tu dices

Cita:
Empezado por cadetill
Si pongo una máscara tal que esta: #,##0.00 el FormatFloat nos devolverá un string tal que este 1.234,56, con lo que la función StrToFloat nos fallará debido a lo que ya se ha comentado
pero no es StrToFloat quien usa lo que devuelve FormatFloat sino alrevés: FormatFloat usa lo que devuelve StrToFloat.

StrToFloat, en el código original, es un parámetro de FormatFloat y estarás de acuerdo en que los parámetros de una función se evalúan antes que la función.

// Saludos
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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


La franja horaria es GMT +2. Ahora son las 13:12:15.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi