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 20-01-2012
Kubelo Kubelo is offline
Miembro
 
Registrado: feb 2010
Posts: 58
Poder: 15
Kubelo Va por buen camino
Problema con FloatToStr

Hola, en primer lugar agradecer la molestia de leer mi problema y ayudarme.

Vamos a ver, tengo una función tal que así:

Código Delphi [-]
procedure TNuevoEdit.SetFloat(ValorFloat: Double);
begin
 if Tipo = TipoFloat then Text := FloatToStr(ValorFloat);
end;

Bien el problema que me he encontrado es que al pasar un valor tipo (ValorFloat = 1e-05) me pasa a partir de 5 decimales, ya que sino el valor llega como 0,0001. Pues bien en los casos que coge exponenciales al final el text se me pasa como un valor negativo.

Por ejemplo:

(0,00001) -> 1e-05 -> Text = -15
(0,00002) -> 2e-05 -> Text = -25

Es muy curioso pero me esta resultando un quebradero de cabeza. Así que espero ideas para que al final me quede como tiene que quedar, es decir:

1e-05 -> Text = 0,00001
2e-05 -> Text = 0,00002

Gracias de nuevo
Responder Con Cita
  #2  
Antiguo 20-01-2012
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 Kubelo.

Fijate si te sirve de este modo:
Código Delphi [-]
procedure TNuevoEdit.SetFloat(Value: Double);
begin
  Text:= FormatFloat('0.##########', Value);
end;


Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 20-01-2012
Kubelo Kubelo is offline
Miembro
 
Registrado: feb 2010
Posts: 58
Poder: 15
Kubelo Va por buen camino
Pero eso siempre me devolverá decimales, y no tiene q ser así, debe devolver el valor correcto con o sin decimales.

Además el número de decimales puede variar dependiendo de donde se use el Edit que estoy desarrollando.

Gracias
Responder Con Cita
  #4  
Antiguo 20-01-2012
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
¿Y si utilizas Trunc(), no te sirve lo mismo? Digo, si lo que deseas es eliminar los decimales, es tu mejor opción...
__________________
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 20-01-2012
Kubelo Kubelo is offline
Miembro
 
Registrado: feb 2010
Posts: 58
Poder: 15
Kubelo Va por buen camino
No quiero eliminar los decimales, el problema es q cuando llega un 1e-05 en lugar de pintar 0,00005 que sería lo correcto, me pinta -15. Jejejee
Responder Con Cita
  #6  
Antiguo 20-01-2012
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
Cita:
Empezado por Kubelo Ver Mensaje
No quiero eliminar los decimales, el problema es q cuando llega un 1e-05 en lugar de pintar 0,00005 que sería lo correcto, me pinta -15. Jejejee
Tál como está tu código, lo correcto es que muestre 1E-5. Lo que no entiendo a que puede deberse que te muestre -15...

Realicé una prueba sencilla que te adjunto por si te sirve:
Código Delphi [-]
...
implementation  {$R *.dfm}

type
  TNuevoEdit = class(TEdit)
  private
    FFloat: Double;
    procedure SetFloat(Value: Double);
  public
    property Float: Double read FFloat write SetFloat;
  end;


procedure TNuevoEdit.SetFloat(Value: Double);
begin
  Text:= FloatToStr(Value);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  with TNuevoEdit.Create(Self) do
  begin
    Parent:= Self;
    Float := 0.00001;
  end;
end;
y el resultado es 1E-5, tál como se esperaría de la conversión efectuada:



Pero hay algo que todavía no me termina de quedar claro y es: ¿ Que formato de salida (exáctamente) deseas en la propiedad Text de TNuevoEdit ?

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 20-01-2012
Kubelo Kubelo is offline
Miembro
 
Registrado: feb 2010
Posts: 58
Poder: 15
Kubelo Va por buen camino
El tema es que necesito que devuelva 0,00001. Ahí radica el problema. Si, se que es raro, pero por eso os pido ayuda a los gurús
Responder Con Cita
  #8  
Antiguo 20-01-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Ahora sí que no lo entiendo
Responder Con Cita
  #9  
Antiguo 20-01-2012
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
Cita:
Empezado por Kubelo Ver Mensaje
El tema es que necesito que devuelva 0,00001. Ahí radica el problema. Si, se que es raro, pero por eso os pido ayuda a los gurús
Probá con esta máscara:
Código Delphi [-]
  Text:= FormatFloat('0.##.########', Value);

Por ejemplo:
Código:
Value =   0.00001 , resultado: 0,00001
Value = 123       , resultado: 123
Value = 567.88    , resultado: 567,88
...
Es un problema de máscaras, busca en la ayuda de Delphi por 'FormatFloat'

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 20-01-2012 a las 19:55:24.
Responder Con Cita
  #10  
Antiguo 20-01-2012
Kubelo Kubelo is offline
Miembro
 
Registrado: feb 2010
Posts: 58
Poder: 15
Kubelo Va por buen camino
Ya salí del trabajo, el lunes lo pruebo, pero si le llega 1e-05 también funciona? Jejeje Ahí me queda la duda durante el fin de semana...

Jejeje

Gracias por vuestro tiempo, sois geniales!
Responder Con Cita
  #11  
Antiguo 23-01-2012
Kubelo Kubelo is offline
Miembro
 
Registrado: feb 2010
Posts: 58
Poder: 15
Kubelo Va por buen camino
Buenas de nuevo, la opción
Código Delphi [-]
FormatFloat('0.##.########', VFloat);
tal y como esperaba no me sirve, ya que a parte de seguir poniendo el valor en negativo, ahora me añade los decimales, y no es lo que busco.

Espero alguna idea más a ver si consigo desenredarme! Jeje

Gracias de nuevo
Responder Con Cita
  #12  
Antiguo 23-01-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
En lugar de un double, ¿puedes usar un currency?
Responder Con Cita
  #13  
Antiguo 23-01-2012
Kubelo Kubelo is offline
Miembro
 
Registrado: feb 2010
Posts: 58
Poder: 15
Kubelo Va por buen camino
Hola Casimiro, no, ha de ser un float, ya que a ese campo le puede llegar cualquier cosa.

Es uno de los inconvenientes.

Gracias
Responder Con Cita
  #14  
Antiguo 23-01-2012
amadis amadis is offline
Miembro
 
Registrado: may 2005
Ubicación: San José, Colón, Entre Ríos, Argentina
Posts: 315
Poder: 20
amadis Va por buen camino
Prueba con el comando FloatToStrF

Es un comando practico que permite sobrecarga y te pasa el resultado a donde quieras, variable o al edit.

Aqui dejo una ayuda.

The FloatToStrF function converts a floating point number Value into a displayable string, with great control over the formatting via the Format, Precision, and Digits values.

The Value type may be any of the floating point types.

The Format parameter is defined by the TFloatFormat (SysUtils) type :
ffCurrency eg : ?2,345.60
ffExponent eg : 2.3456E+04
ffFixed eg : 2345.60
ffGeneral eg : 2345.6
ffNumber eg : 2,345.6
Responder Con Cita
  #15  
Antiguo 23-01-2012
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 Kubelo.

Sigo sin entender como es posible (dado el código que presentaste) que enviándo como argumento a SetFloat el valor 0.00001 obtengas el resultado -15.
Eso me hace preguntar si no tendrás algún problema con Delphi...


Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #16  
Antiguo 23-01-2012
Kubelo Kubelo is offline
Miembro
 
Registrado: feb 2010
Posts: 58
Poder: 15
Kubelo Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Hola Kubelo.

Sigo sin entender como es posible (dado el código que presentaste) que enviándo como argumento a SetFloat el valor 0.00001 obtengas el resultado -15.
Eso me hace preguntar si no tendrás algún problema con Delphi...


Saludos.
Creo que nos hemos malentendido ecfisa, a la función no le llega 0,000001, sino 1e-05, pero realmente lo original si es 0,000001. No se si ahora me he expresado con claridad.

Mañana sin falta pruebo el FloatToStrF, me dejaste intrigado amadis.

Gracias a todos!
Responder Con Cita
  #17  
Antiguo 23-01-2012
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
Cita:
Empezado por Kubelo Ver Mensaje
Creo que nos hemos malentendido ecfisa, a la función no le llega 0,000001, sino 1e-05, pero realmente lo original si es 0,000001. No se si ahora me he expresado con claridad.

Mañana sin falta pruebo el FloatToStrF, me dejaste intrigado amadis.

Gracias a todos!
En realidad si el envías 0.00001, 1E-05, 1/100000 o 10 ^(-5) es indiferente ya que estamos hablando del mismo número representado en formatos diferentes. Lo que no entiendo es como obtenes los resultados -15 y -25.

Utilizando el número 1E-05 o 0.00001, tanto con FloatToStrF como con FormatFloat obtenés el resultado esperado: 0,00001
Código Delphi [-]
...
var
  x: Double;
begin
  x:= 1E-05; // del mismo modo funciona con: 12325,12345/-12345,12345, 56789.00003/-56789.00003, etc
  ShowMessage(FloatToStrF(x, ffFixed,10, 5)     // 0,00001
              +#10#13+
              FormatFloat('0.##.########', x)); // 0,00001
Sigo sin entender el problema... ¿ Podés ponernos algunos valores que enviados a SetFloat te provocan resultados indeseados ?

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 23-01-2012 a las 21:08:46. Razón: agregar comentario
Responder Con Cita
  #18  
Antiguo 24-01-2012
Kubelo Kubelo is offline
Miembro
 
Registrado: feb 2010
Posts: 58
Poder: 15
Kubelo Va por buen camino
Bueno pues tal y como me temía el FloatToStrF, tampoco funciona.

ecfisa, los valores que me fallan son siempre 0,0000... a partir de 5 decimales que es cuando lo pasa a exponencial, y siempre "0,", es decir el valor 1,00001 lo coge bien, pero el 0,00001 ya no lo coge bien.

Gracias
Responder Con Cita
  #19  
Antiguo 24-01-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Y de dónde salen esos números, ¿una función, un reloj, al azar, algún usuario que los escribe?
Responder Con Cita
  #20  
Antiguo 24-01-2012
Kubelo Kubelo is offline
Miembro
 
Registrado: feb 2010
Posts: 58
Poder: 15
Kubelo Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Y de dónde salen esos números, ¿una función, un reloj, al azar, algún usuario que los escribe?
Introducidos por el usuario.
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
Cambio de formato floattostr tbolzan Varios 5 27-09-2012 09:23:35


La franja horaria es GMT +2. Ahora son las 00:26:25.


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