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 28-01-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__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
  #2  
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
  #3  
Antiguo 28-01-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
mmmmm, esto..... me parece que nos estamos liando

Veamos el código que nos manda nuestro colega

Código:
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);
Bien, yo entiendo que la linea
Código:
  st:= FormatFloat('#,##.00',strtofloat(st));
le funciona correctamente, por lo que aquí no hay error ni con StrToFloat ni con FormatFloat
Esto lo deduzco por lo que pone en la siguiente linea:
Código:
  ShowMessage(st); //aquí muestra el mensaje perfectamente,todo muy bien
Por lo que creo que el error está en la útima línea de código
Código:
  numero:= StrToFloat(st);
Donde, una vez hecha la transformación con el FormatFloat (que le ha funcionado bien) intenta volver a transformar el string logrado a un real y, es aquí donde se le presenta el error ya que el string lleva formato

Por eso le recomendaba que no pusiera formato (separador de millares) y, así, esta segunda transformación no le daría problemas

Quizás tu te referias al primer StrToFloat??? Si es así, sí que te doy la razón
Responder Con Cita
  #4  
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
mmmmm, esto..... me parece que nos estamos liando
¡Qué gentil por el uso del plural pero ya ví mi error!

Marto uy tú tienen toda la razón. Es que yo, como compilador omito los comentarios y la prueba que hice fue sólo hasta el primer StrToFloat y pensé que Letty dejaba que el usuario escribiera en el Edit los "adornos".

Siendo como me han hecho ver el asunto es clarísimo: A StrToFloat sólo pueden pasársele números reales de " a de veras": dígitos, coma (o punto) decimal, + o - y la E de notación exponencial, y no adornados como sucede en la segunda llamada

// Disculpas

pd: Lo naranja fue añadido.

Última edición por roman fecha: 28-01-2004 a las 17:58:49.
Responder Con Cita
  #5  
Antiguo 28-01-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Cita:
Empezado por roman
// Disculpas
Faltaría más!!!! no eran necesarias
Responder Con Cita
  #6  
Antiguo 28-01-2004
Avatar de marto
marto marto is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona, Catalunya
Posts: 882
Poder: 22
marto Va por buen camino
Cita:
Empezado por roman
pero no es StrToFloat quien usa lo que devuelve FormatFloat sino alrevés: FormatFloat usa lo que devuelve StrToFloat.
¿Estás seguro de eso?

Código:
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 
  //Hemos pasado el FomatFloat bien, ya que ednumero.Text estaba sin 
  //adornar pero ahora st ya tiene "adornos"
  numero:= StrToFloat(st);
  //aqui es donde peta, ya que le pasamos a StrToFloat 
  //el resultado de FormatFloat
end;
__________________
E pur si muove
Responder Con Cita
  #7  
Antiguo 28-01-2004
Avatar de marto
marto marto is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona, Catalunya
Posts: 882
Poder: 22
marto Va por buen camino
Cadetill, me ganaste en la respuesta por dos minutos!!!!
__________________
E pur si muove
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


La franja horaria es GMT +2. Ahora son las 23:25:15.


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