elt93
Messages postés46Date d'inscriptionjeudi 13 mars 2008StatutMembreDernière intervention 9 février 2009
-
17 mai 2008 à 18:25
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 2022
-
19 mai 2008 à 02:46
Bonjour,
Je travaille sur un logiciel de calcul ou jaimerais ajouter une fonction arrondir, en dessous se situe une TListBox avec les nombres de 1 à 5 sur chaque ligne que l'utilisateur selectionne pour dire combien de nombre veut-il apres la virgule, j'ai tenté ceci, mais ca n'a pas marché :
var
a: extended;
b: extended;
e: string;
begin
if arrondir.checked then try
if nombre.Items.Strings[nombre.ItemIndex]<> '1' then
e:= '0.0' else if nombre.Items.Strings[nombre.ItemIndex] <> '2' then
e:= '0.00' else if nombre.Items.Strings[nombre.ItemIndex] <> '3' then
e:= '0.000' else if nombre.Items.Strings[nombre.ItemIndex] <> '4' then
e:= '0.0000' else if nombre.Items.Strings[nombre.ItemIndex] <> '5' then
e:= '0.00000' ;
finally
end;
if cube.Checked then try
if vol.checked then try
a:= strtofloat(la.Text);
b:= a*a*a;
finally
if arrondir.checked then FormatFloat(e , b);
Memo1.Lines.add('Volume du cube = '+floattostr(b)+ ' cm3');
if CheckBox1.Checked then Memo1.Lines.add('Formule (volume du cube) : longueur arête x longueur arête x longueur arête ');
end;
...
end;
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 18 mai 2008 à 07:50
et "nombre" doit etre remplis comme suit (propriété "Strings") :
0
1
2
3
4
5
6
7
8
9
ne pas arrondir
l'option Ne pas arrondir doit retourner FltPrec = -1 (evenement onchange)
on pourrait même compliquer les choses en ajoutant une autre combobox permettant de choisir l'arrondis, au plus petit, au plus prés, au plus grand (floor, round, ceil).
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 19 mai 2008 à 02:46
oui, les programmeurs compte a partir de 0 ...
bytes, 256 valeurs ... de 0 a 255
word, 65536 valeurs ... de 0 a 65535
integer, 2^32 valeurs ... de -2^31 a 2^31-1
longword, 2^32 valeurs ... de 0 a 2^32-1
JulioDelphi
Messages postés2226Date d'inscriptiondimanche 5 octobre 2003StatutMembreDernière intervention18 novembre 201014 17 mai 2008 à 19:17
0) Salut,
1) Je pose un edit (edit1), je mets '5.987654321' dans son text.
2) Je pose un edit (edit2), je vide son text.
3) Je pose une listbox (listbox1), je mets 5 lignes, les chiffres de 1 à 5.
4) Je pose un bouton (button1), je mets cette procedure dessus :
elt93
Messages postés46Date d'inscriptionjeudi 13 mars 2008StatutMembreDernière intervention 9 février 2009 17 mai 2008 à 19:46
Merci beaucoup,
Mais pourquoi lorsque j'execute, et que je clique , le bouton, j'ai une exception disant: " n'est pas une valeur en virgule flottante correcte.
elt93
Messages postés46Date d'inscriptionjeudi 13 mars 2008StatutMembreDernière intervention 9 février 2009 17 mai 2008 à 20:06
Merci F0xi, je naivais pas vu ton poste avant de mettre mon dernier post. J'ai adapté ton code à mon logiciel, j'ai aucune exception mais ca ne marche pas, le nombre ne s'arrondit pas, voici ce que j'ai fait :
uses Math
var FltPrec : integer;
(nombre = Combobox)
procedure TForm1.nombreChange(Sender: TObject);
begin
case nombre.ItemIndex of
10 : FltPrec := -1;
else
FltPrec := nombre.ItemIndex;
end;
end;
procedure TForm1.Button27Click(Sender: TObject);
var
a: extended;
b: extended;
e: string;
begin
if cube.Checked then try
if vol.checked then try
a:= strtofloat(la.Text);
b:= a*a*a;
finally
if arrondir.Checked then case FltPrec of
-1 : e := format('%f',[b]);
0 : e := format('%d',[Round(b)]);
else
e := format('%.*f',[FltPrec,RoundTo(b, -FltPrec)]);
end;
Memo1.Lines.add('Volume du cube = '+floattostr(b)+ ' cm3');
if CheckBox1.Checked then Memo1.Lines.add('Formule (volume du cube) : longueur arête x longueur arête x longueur arête ');
end;
elt93
Messages postés46Date d'inscriptionjeudi 13 mars 2008StatutMembreDernière intervention 9 février 2009 18 mai 2008 à 10:57
Ok super, vraiment merci
mais quand je met la comboBox sur ne pas arrondir ca l'arrondit quand meme a deux chiffres après la virgule.
Vraiment merci f0xi !
elt93
Messages postés46Date d'inscriptionjeudi 13 mars 2008StatutMembreDernière intervention 9 février 2009 18 mai 2008 à 16:52
Desole, pour mon dernier post c'était une erreur d ema part, il fallaiut juste entrer 11 à la place de 10 puisque 'Ne pas arrondir se trouvait à la 11 eme ligne en comptant le 0 et le 10.