Ir al contenido


Foto

is not a valid floating point value


  • Por favor identifícate para responder
13 respuestas en este tema

#1 look

look

    Advanced Member

  • Miembros
  • PipPipPip
  • 418 mensajes
  • LocationLa Ceiba-Atlantida-Honduras

Escrito 05 diciembre 2011 - 10:29

tengo este problema al hacer esto



delphi
  1. var tot:Currency;
  2. begin
  3.     tot := StrToCurr(FormatFloat('###,###,##0.00',CurrencyEdit1.Value));
  4. end;
  5.  



y en el evento onCreate:


delphi
  1.   DecimalSeparator := '.';
  2.   ThousandSeparator := ',';



al ingresar una cantidad como 2,500 me salta ese error:



delphi
  1. '2,500.00' is not a valid floating point value



¿que puedo hacer?


  • 0

#2 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 mensajes
  • LocationEspaña

Escrito 05 diciembre 2011 - 10:48

Ingresa el número sin la coma, verás cómo te funciona ;)

Nos leemos
  • 0

#3 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 05 diciembre 2011 - 10:49

y Por que Currency y no Double?.
  • 0

#4 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 mensajes
  • LocationEspaña

Escrito 05 diciembre 2011 - 11:05

Bueno, como ya se dijo en otro hilo, si quieres tratar numeros con un máximo de 4 decimales, el Currency es mucho más preciso (no da margen a error dado que realmente es un entero) que un punto flotante. Para valores monetarios es el tipo de dato aconsejado.

Nos leemos

  • 0

#5 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 05 diciembre 2011 - 11:11

Bueno, como ya se dijo en otro hilo, si quieres tratar numeros con un máximo de 4 decimales, el Currency es mucho más preciso (no da margen a error dado que realmente es un entero) que un punto flotante. Para valores monetarios es el tipo de dato aconsejado.

Nos leemos


Caray, siempre he usado Double para esos menesteres :$
  • 0

#6 look

look

    Advanced Member

  • Miembros
  • PipPipPip
  • 418 mensajes
  • LocationLa Ceiba-Atlantida-Honduras

Escrito 05 diciembre 2011 - 11:17

Ingresa el número sin la coma, verás cómo te funciona ;)

Nos leemos


Imagen Enviada


  • 0

#7 look

look

    Advanced Member

  • Miembros
  • PipPipPip
  • 418 mensajes
  • LocationLa Ceiba-Atlantida-Honduras

Escrito 05 diciembre 2011 - 11:20

hola , si solo hago esto tambien me da error:



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var tot:Double;
  3. begin
  4.     tot := StrToCurr(FormatFloat('###,###,##0.00',1000));
  5. end;
  6.  


  • 0

#8 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 05 diciembre 2011 - 11:26

hola , si solo hago esto tambien me da error:



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var tot:Double;
  3. begin
  4.     tot := StrToCurr(FormatFloat('###,###,##0.00',1000));
  5. end;
  6.  



Mira, estoy seguro que en algun lado se dispara el evento OnChange con algun calculo en algun TEdit que tienes, revisa eso.
  • 0

#9 look

look

    Advanced Member

  • Miembros
  • PipPipPip
  • 418 mensajes
  • LocationLa Ceiba-Atlantida-Honduras

Escrito 05 diciembre 2011 - 11:34


hola , si solo hago esto tambien me da error:



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var tot:Double;
  3. begin
  4.     tot := StrToCurr(FormatFloat('###,###,##0.00',1000));
  5. end;
  6.  



Mira, estoy seguro que en algun lado se dispara el evento OnChange con algun calculo en algun TEdit que tienes, revisa eso.


hola amigo, ese es un formulario nuevo, el que deja por defecto el delphi cuando lo abres, sin ningun edit , solo el boton....
yo mas creo que mi delphi tiene problemas... esta muy extraño el comportamiento.

  • 0

#10 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 05 diciembre 2011 - 11:40

Hola,
Yo creo que el error se debe a que estás intentando guardar un Currency en un Double. Fíjate que en tu código se ve una variable de tipo Double, pero tu estás intentando hacer una conversión de cadena a Currency.
Y como te han dicho: Currency <> Double. Es más, ¡Currency es en realidad un tipo entero! Aunque no lo parezca.

Saludos,
  • 0

#11 Cron

Cron

    Member

  • Visitante
  • PipPip
  • 41 mensajes
  • LocationCD DE MEXICO

Escrito 05 diciembre 2011 - 11:43

Hola,
Yo creo que el error se debe a que estás intentando guardar un Currency en un Double. Fíjate que en tu código se ve una variable de tipo Double, pero tu estás intentando hacer una conversión de cadena a Currency.
Y como te han dicho: Currency <> Double. Es más, ¡Currency es en realidad un tipo entero! Aunque no lo parezca.

Saludos,


Efectivamente

No puedes asignar un currency con formato a un double por ser incompatibles, solo lo puedes hacer si le quitas el formato al currency




Saludos

#12 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 05 diciembre 2011 - 11:44

Vaya, lo acabo de probar y me pasa lo mismo  :|  :|



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var tot:Double;
  3. begin
  4.     tot := StrToFloat(FormatFloat('#,##0.00',1000));
  5. end;
  6.  


  • 0

#13 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 mensajes
  • LocationEspaña

Escrito 05 diciembre 2011 - 12:02

Vale, perdona, no me había fijado en todos los cambios de tipo

Te explico, para poder hacer un cambio de tipo entre string y un numérico, éste tiene que ir sin separador de millares, sino siempre te dará un error en la conversión.

Cuando haces esto:



delphi
  1.     tot := StrToCurr(FormatFloat('###,###,##0.00',CurrencyEdit1.Value));
  2.  



Lo que hace Delphi es esto:

Valor Edit: 4500.00
Pasa el calor numérico a string dándole formato: 4,500.00
Luego intenta pasarlo nuevamente a numérico, pero al tener ya el separador de millares, es cuando te salta el error.

No entiendo todas estas transformaciones, dado que puedes asignarle a la variable tot directamente el valor del CurrencyEdit, pero si realmente son necesarias, lo que tienes que hacer es cambiar la máscara a '0.00' para quitar el separador de millar

Nos leemos

  • 0

#14 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 05 diciembre 2011 - 12:03

El error está en que no deben indicarse el símbolo de miles. Cuando uno hace una asignación no pasa el número con el carácter separador de miles.
Pruébese directamente con:



delphi
  1. tot := StrToFloat(1000,00);



Y comparen lo que se obtiene cuando se forma la cadena tras la instrucción:



delphi
  1. FormatFloat(#,##0.00;1000);
  2.  



Si uno hiciera un ShowMessage() de esa instrucción obtendría esto: 1,000.00 ó 1.000,00 según el separador decimal y de miles que tengamos configurados en nuestra configuración local (o el que hayamos indicado a las variables)

EDITO:
Cadetill me ha ganado.

Y es muy cierto, se está haciendo unos pases y conversiones de tipo innecesarios.

Saludos,
  • 0




IP.Board spam blocked by CleanTalk.