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 05-07-2003
CRIS CRIS is offline
Miembro
 
Registrado: jul 2003
Posts: 63
Poder: 21
CRIS Va por buen camino
Duda con los porcentajes en un label

Hola chicos aqui tengo otra duda que no se como resorverla, a ver si me explico:
tengo un label1 en el cual me salen cantidades en € y tengo un label2 en el que quiero que me salga el porcentaje que yo le ponga mediante un edit1, con lo cual si yo en el edit1 pongo 55 que en el label 2 me ponga el 55% de la cantidad que pone el label1. Ya me contareis como se hace esto si podeis claro. salu2.CRIS.
Responder Con Cita
  #2  
Antiguo 05-07-2003
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
¿No será esto lo que pides?

Código:
procedure TForm1.Button1Click(Sender: TObject);
begin
label2.caption:=label1.caption + '%';
end;
Un Saludo.
Responder Con Cita
  #3  
Antiguo 06-07-2003
CRIS CRIS is offline
Miembro
 
Registrado: jul 2003
Posts: 63
Poder: 21
CRIS Va por buen camino
Hola creo que me he explicado mal, yo lo que necesito es que me haga realmente el calculo, no que me ponga el signo %, la verdad es que no me di cuenta que se podria interpretar de esa forma la pregunta.

Salu2.CRIS.
Responder Con Cita
  #4  
Antiguo 06-07-2003
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Aquí tienes otro ejemplo:

Omito las comprobaciones necesarias, es decir asegurarse primero que en"Label1" realmente hay un número válido, lo mismo que en "Edit1".

Código:
procedure TForm1.Button1Click(Sender: TObject);
begin
Label2.Caption:=FormatFloat(',0.00',StrToFloat(Label1.Caption) * StrToFloat(Edit1.Text) /100);
end;
Un Saludo.
Responder Con Cita
  #5  
Antiguo 06-07-2003
CRIS CRIS is offline
Miembro
 
Registrado: jul 2003
Posts: 63
Poder: 21
CRIS Va por buen camino
Gracias marcoszorrilla, va de lujo, a ver si me puedes decir ahora como hago para que al label2 se le pueda restar el porcentaje que tengamos en un edit2, osa que me calcule el porcentaje menos otro porcentaje, ejemplo:

label1 = (label2 x edit1%)-(edit2%)

osea que con la formula que tu me has dado antes solo abria que restarle el porcentaje que pongamos en otro edit, no se si me he explicado bien.

Salu2.CRIS.
Responder Con Cita
  #6  
Antiguo 06-07-2003
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Código:
procedure TForm1.Button1Click(Sender: TObject);
begin
Label2.Caption:=FormatFloat(',0.00',StrToFloat(Label1.Caption) * StrToFloat(Edit1.Text) /100 -  StrToFloat(Edit2.Text) );
end;
Un Saludo.
Responder Con Cita
  #7  
Antiguo 07-07-2003
CRIS CRIS is offline
Miembro
 
Registrado: jul 2003
Posts: 63
Poder: 21
CRIS Va por buen camino
Hola marcoszorrilla, no ha funcionado, de esta forma lo que hace es restar el numero que tengas en el edit2 y yo lo que necesito es que me reste el numero que hay en el edit2 pero como tanto por ciento, osea restarle el 7 % a la cantidad del label2.

Salu2 y perdona por darte tanto la lata pero esque estoy a falta de esto para terminar la aplicacion. CRIS.

PD. esto es lo que necesito, asi se ve mas claro.

Ejemplo:

((300 x 9%) = 27) - (7%) = 25,11 €
((label1 x edit1) = 27) - (edit2) = label2
Responder Con Cita
  #8  
Antiguo 07-07-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 22
andres1569 Va por buen camino
Hola:

CRIS, aunque a este hilo ya te está respondiendo Marcos Zorrilla, creo que en sus anteriores respuestas ya ha quedado claro cómo Obtener un número a partir de una cadena de texto (StrToFloat), y cómo calcular un porcentaje (cantidad * Porcentaje / 100). Creo que a partir de esa base, cualquier programador debería saber dar solución al problema que se te plantea.

Aparte de lo que te responda Marcos, no estaría mal que lo intentaras por tu cuenta, es la mejor manera de que aprendas a hacerlo por tí mismo. No dudo de que lo hayas intentado, pero me extraña que algo así no te acabe de salir, escribenos lo que tengas implementado al respecto, a ver si detectamos por dónde anda el error.

Como recomendación, create dentro del procedimiento algunas variables y almacena en ellas los procentajes que vas calculando, y al final operas con ellos. Te servirá para verlo todo más claro.

Un saludo
__________________
Guía de Estilo
Responder Con Cita
  #9  
Antiguo 07-07-2003
CRIS CRIS is offline
Miembro
 
Registrado: jul 2003
Posts: 63
Poder: 21
CRIS Va por buen camino
Hola andres1569, gracias por contestarme, ya se que igual son cosas que un programador las haria sin problemas, pero el problema es que yo no soy programador, en mis ratos libres estoy desarroyando una aplicacion, con ayudas, ejemplos etc... no he estudiado programacion en delphi ni nada por el estilo, siempre ha sido gracias a vosotros y a otros foros, cuando empece lo hice con otro nick aqui en clubdelphi y la verdad es que siempre me habeis ayudado, por eso digo que perdoneis mi ignorancia pero para no haber estudiado nada de nada, no esta mal, bueno no me enrrollo mas, la verdad es que sigo dandole vueltas y me ha salido pero como tu me has dicho, primero saco la cantidad primera y despues a esa cantidad le saca el otro porcentaje, lo resto y un label ya tengo lo que quiero y todo esta solucionado, pero ya era saber como se podia hacer todo del tiron, vamos si se puede que supongo que ustedes que sois profesionales lo sabreis hacer, yo entiendo mas de otras cosas, bueno chicos me voy a pelarme un poco que tengo el pelo mu largo, venga saludetes. CRIS.

PD.
Y si alguna vez necesitais algo sobre tema de vcd, osea pelis para verlas en el dvd no dudeis en preguntarme, de eso esotoy puesto al dia y soy un maquina. te puedes bajar del emule (Manual de Cris 2.0) esta hecho con delphi como no.
Responder Con Cita
  #10  
Antiguo 07-07-2003
Avatar de hecjona
hecjona hecjona is offline
Miembro
 
Registrado: may 2003
Ubicación: Guadalajara, Jal. Mexico
Posts: 84
Poder: 22
hecjona Va por buen camino
Prueba con esto

Código:
procedure TForm1.Button1Click(Sender: TObject);
begin
       Label2.Caption:=FormatFloat(',0.00',
                                  ( StrToFloat(Label1.Caption) * 
                                     (StrToFloat(Edit1.Text) /100)) * 
                                  ((100-StrToFloat(Edit2.Text)) /100) );
end;
Cita:
digo que perdoneis mi ignorancia
No te disculpes por no saber, creo que es de sabios preguntar lo que no se sabe.

Te felicito porque aun sin ser programador te tiras al ruedeo como un buen torero.

Me gustaria ver tu manual.
__________________
Saludos desde la tierra del tequila y las mujeres hermosas
Responder Con Cita
  #11  
Antiguo 07-07-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 22
andres1569 Va por buen camino
Hola:

Veamos, no soy quien tiene que perdonar tu ignorancia, ¿acaso crees que yo no soy ignorante? Pero si este programa lo vas a comercializar, como parece que es el caso por lo que he leído en otro hilo posteado por tí, a quien vas a tener que pedir que perdone tu ignorancia es al cliente de tu programa si algo falla, y no creo que le valgan tus explicaciones. De igual manera, si voy al cirujano y me amputa un dedo por error, podrá decirme que ha sido un fallo médico, pero no podrá pedirme que disculpe su ignorancia porque en realidad su profesión es carnicero y lo de cirujano lo ejerce en sus ratos libres.

Me alegro de que Hecjona te haya solucionado tu problema, pero me apena pensar que la próxima vez que tengas que calcular algo parecido tengas que volver a postear en un foro para que alguien te haga el guiso. Ten en cuenta que no estás programando un juego de marcianitos. Lo digo porque aparecen Euros y ese 7% a mi me recuerda el cálculo del IVA, aunque al final restes en vez de sumar.

En mi mensaje traté de espolearte para que tú mismo trataras de solucionarlo, y si hubieras puesto el código que tenías implementado, seguro que te lo hubiera revisado, llevo ya unos meses en estos foros tomándome muy en serio el buscar soluciones a cuestiones ajenas (y no tan ajenas) y suelo tomarme bastante de mi tiempo en contestar adecuadamente.

Hecjona escribió:
Cita:
Te felicito porque aun sin ser programador te tiras al ruedeo como un buen torero.
¡Me gusta la gente valiente que se echa al ruedo sin miedo!, pero no olvidemos que el torero arriesga su propia vida, y con tu programa puedes comprometer aspectos (la economía ¿tal vez?) de quien lo compre. Esta no es una cuestión trivial, al menos no lo es la economía de los demás, y no se puede tomar como algo de aficionados; dicho esto, te animo a seguir, porque de la afición se pasa a la profesión. ¡ANIMO!

Bueno, ahora voy a tratar de enseñarte cómo hacerlo, paso a paso para que lo veas más claro:
Código:
procedure TForm1.Button1Click(Sender: TObject);
var
  Importe, Descuento, Total : Currency;
begin
  Importe := StrToFloat(Label1.Caption) * StrToFloat(Edit1.Text) / 100;
  Descuento := Importe * StrToFloat(Edit2.Text) / 100;
  Total := Importe - Descuento;
  Label2.Caption := FormatFloat(',0.00', Total);
end;
Declaro tres variables que he decidido llamar Importe, Descuento y Total, por claridad; en Importe hago el cálculo, hallando el tanto por cien, indicado en Edit1, de la cantidad tomada del Label1.

En descuento hallo el tanto por cien, indicado en Edit2, de la cantidad almacenada en Importe.

Por último hallo el Total, donde resto el Descuento del Importe. Luego muestro el Total en el Label2.

Si lo quieres todo de un tirón coge la fórmula de Hecjona, que varía en que en vez de restar el último porcentaje aplicado a la cantidad que ya teníamos, aplica el porcentaje inverso (100 - porcentaje) a esa cantidad, es una forma más rápida de hacer lo mismo.

Termino esta parrafada con un proverbio japonés:
Cita:
Dale un pescado a un mendigo, y le aliviarás el hambre de un día,
enséñale a pescar, y le aliviarás el hambre toda su vida.
__________________
Guía de Estilo
Responder Con Cita
  #12  
Antiguo 07-07-2003
CRIS CRIS is offline
Miembro
 
Registrado: jul 2003
Posts: 63
Poder: 21
CRIS Va por buen camino
Pues la verdad es que he captado lo dicho, gracias a todo el que me ha ayudado en estos 4 post que he escrito y como mi profesion no tiene nada que ver con la programacion, pues dejare de postear aqui y me buscare la vida con los libros o como pueda, como no tengo tiempo de estudiar por que mi trabajo se lo lleva todo pues seguire haciendo lo mismo, viendo ejemplos etc.. la aplicacion que he creado esta hecha a medida para mi trabajo en concreto, es fantastica y no tiene fallos, solo queria implementarle lo de los % y ya lo he puesto gracias a vosotros, ya me gustaria a mi saber lo que sabeis y poder decir que se programar pero por desgracia es lo que tengo, pero despues de saber que la aplicacion esta ya casi terminada se me ha quedado un mal salvor de boca con este ultimo post. Saludos y gracias a todos.

Cris.
Responder Con Cita
  #13  
Antiguo 08-07-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 22
andres1569 Va por buen camino
Hola Cris:

Respeto lo que decidas, tanto si quieres seguir posteando en los foros como si no, pero de ninguna manera me siento responsable de lo que hagas.

Otra cosa: no te infravalores tanto, ni tú eres tan ignorante ni nosotros tan sabios, si has hecho un programa magnífico y sin fallos, lo cual ya es mucho, es que debes saber de qué va la cosa, así que lo de que no eres programador no cuela. Y si has hecho un programa, estás preparado para entender lo que estabas preguntando. Si te respondí como lo hice es porque creo que las cosas hay que entenderlas y no simplemente copiar y pegar. En el aprendizaje de la programación, se tenga una base académica o no, lo que más cuenta son las horas frente a la pantalla, probando, deshaciendo, colgando el sistema 20 veces al día, mirando éste o aquel código y tratando de aprender. Me da la sensación de que ya llevas un puñado de horas de vuelo, así que no quieras darnos pena y aparecer como un novatillo que a la vez quiere vender un programa.

Entiendo que te llevaras un palo con mi mensaje, pero mejor es que te digan esto en un foro a que te lleves el palo en la vida real. Además, dices que el programa tiene que ver con tu trabajo, seguro que está bien hecho, no tengo por qué dudarlo.

Por mi parte, esto es todo, anímate y pasa de mí si quieres, hay mucha más gente en estos foros para que por uno sólo dejes de participar. Si lo prefieres, me abstendré de responder a tus hilos. Y como dice un dicho popular: "todos somos aficionados, la vida es tan corta que no da para más".

Un saludo
__________________
Guía de Estilo
Responder Con Cita
  #14  
Antiguo 09-07-2003
CRIS CRIS is offline
Miembro
 
Registrado: jul 2003
Posts: 63
Poder: 21
CRIS Va por buen camino
Hola en primer lugar te doy las gracias por los dos post que has escrito, la verdad es que me has abierto los ojos y tengo que aprender el porque de las cosas ya que no lo se, yo hago que dices tu copio y pego, pero eso lo hace cualquiera, mi programa esta perfecto por que hace lo que necesitamos en el trabajo, ni mas ni menos lo justo, llevo ya 2 años haciendole mejoras y la verdad que todo a sido gracias a terceras personas ya que no enteindo el por que de las cosas, solo se que al poner esto o lo otro hace una funcion, ah no pretendo dar pena solo es lo que hay y no dudes en postearme en mis hilos, lo que pasa es que el otro dia me pillo en un mal dia de regimen y habia comido poco, estaba un poco caido, pero tu tranquilo que no pasa nada y seguire posteando y preguntando, seguramente seran cosas que un programador sabe pero yo seguro que no jejejej, bueno que lo dicho que muchas gracias y voy a ver si lo dejo totalmente depurado ya que ayer me lo lleve al curro y me equivoque en un % y no me salia lo que yo queria pero ya se donde esta el probleama y todo eso gracias a vosotros, Saludos y voy a comer que tengo ya muxa hambre.CRIS.
Responder Con Cita
  #15  
Antiguo 09-07-2003
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Me alegro mucho de que todo haya sido una pájara como se dice en términos ciclistas.

Si miras en el menú del Club socios verás que Andrés es de las personas que más colabora en el Club y si lees sus mensajes, además verás que siempre son de gran calidad.

Esperamos que sigas haciendo preguntas.

Un Saludo.






Última edición por marcoszorrilla fecha: 09-07-2003 a las 15:33:41.
Responder Con Cita
  #16  
Antiguo 09-07-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 22
andres1569 Va por buen camino
Hola de nuevo:

Cris, me alegro de que lo veas de esa manera.

Muchas de las cosas que te dije son recomendaciones que me hago a mí mismo a diario, y no siempre puedo cumplir. Por ejemplo, lo de sólo copiar y pegar código, sin tatar de entenderlo, es algo que no podemos evitar muchas veces, por falta de tiempo o porque es demasiado complicado para detenernos a examinarlo. La programación actual, cada vez más sofisticada nos empuja muchas veces a ello; a veces andas desesperado en busca de esa fórmula, rutina o componente que te saque de un apuro y cuando lo encuentras y ves que funciona, no tienes tiempo de pararte a ver cómo lo hace, simplemente quieres que funcione, lo colocas y punto. Lo de los porcentajes, en cambio, es algo que te saldrá en más ocasiones, cuando tengas tiempo trata de hincarle el diente.

Y volviendo al origen de este hilo, voy a ponerte un código para hacer más agradable la introducción de los porcentajes. Se trata de que cuando el usuario vaya escribiendo en los Edits, pueda visualizar simultaneamente el resultado. Estas pijadillas suelen agradecerlas los usuarios:
Código:
procedure TForm1.CalculaPorcentajes;
var
  Importe, Descuento, Total : Currency;
begin
  if Edit1.Text = '' then Importe := 0
  else Importe := StrToFloat(Label1.Caption) * StrToFloat(Edit1.Text) / 100;
  if Edit2.Text = '' then Descuento := 0
  else Descuento := Importe * StrToFloat(Edit2.Text) / 100;
  Total := Importe - Descuento;
  Label2.Caption := FormatFloat(',0.00', Total);
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if NOT (Key in ['0' .. '9']) AND (Key <> #12) AND (Key <> #8) then Key := #0;
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin
  with TEdit(Sender) do
    if (Text <> '') AND (StrToInt(Text) > 100) then
    begin
      Text := Copy(Text, 0, 2);
      SelStart := 2;
    end
  else CalculaPorcentajes;
end;
En primer lugar, desde diseño, deja en blanco la propiedad Text de los Edits, y fija su propiedad MaxLength a 3 (puesto que el mayor número que pueden almacenar es el 100). Luego enlaza los eventos OnKeyPress y OnChange de ambos Edits al código que te pongo arriba. En el OnKeyPress controlamos que sólo se puedan introducir cifras o pulsar las teclas de suprimir y retroceso. En el OnChange hacemos una pequeña verficación de que el número introducido no sea mayor que 100, y si es correcto llamamos al procedimiento CalculaPorcentajes, de manera que a cada cambio, se verá la cantidad calculada en el Label2.

El procedimiento CalculaPorcentajes lo debes declarar también dentro de la declaración del TForm1, por ejemplo en la sección private; realiza lo mismo que el que te puse en un mensaje anterior, pero además comprueba que los Edits tengan escrito algún número, si no es así, interpreta que es 0.

Éxitos con tu programa y con los que vengan detrás,

Un saludo
__________________
Guía de Estilo
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 17:46:01.


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