Arrondir un nombre selon nombre dans une listbox...

Résolu
elt93 Messages postés 46 Date d'inscription jeudi 13 mars 2008 Statut Membre Dernière intervention 9 février 2009 - 17 mai 2008 à 18:25
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 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;

Cordialement,
Merci d'avance pour votre aide !

9 réponses

f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
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).

<hr size="2" width="100%" />
3
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
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

d'ailleur ... 2^0 = 1

<hr size="2" width="100%" />
3
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
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 :


"edit2.Text := floattostrf( strtofloat(edit1.text) , ffFixed , 7 , strtoint( listbox1.Items[listbox1.ItemIndex] ) );"

5) L'arrondi fonctionne.
6) De rien.
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
17 mai 2008 à 19:26
ComboBox1 (cbxFloatPrec) >  0, 1, 2, 3, 4 ... 9, Ne pas arrondir

var FltPrec : integer;

uses Math;

....

procedure TFormX.cbxFloatPrecChange(Sender:TObject);
begin

  case cbxFloatPrec.ItemIndex of
   10 : FltPrec := -1;
   else
        FltPrec := cbxFloatPrec.ItemIndex;
  end;

end;

var S: string;
    F: extended;
begin
  F := a*a*a;

  case FltPrec of
    -1 : S := format('%f',[F]);
     0 : S := format('%d',[Round(F)]);
    else
         S :=
format('%.*f',[FltPrec,RoundTo(F, -FltPrec)]);
  end;
 
  Memo1.Lines.Add('Volume du cube : '+S+' cm3');

end;




<hr size="2" width="100%" />
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
elt93 Messages postés 46 Date d'inscription jeudi 13 mars 2008 Statut Membre Derniè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.
0
elt93 Messages postés 46 Date d'inscription jeudi 13 mars 2008 Statut Membre Derniè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;

Merci beaucoup pour votre aide
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
18 mai 2008 à 07:46
<strike>if arrondir.Checked then</strike>
// ne sert plus a rien car option "ne pas arrondir" dans la combobox en item 10



  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 = '+e+ ' cm3');







<hr size="2" width="100%" />
0
elt93 Messages postés 46 Date d'inscription jeudi 13 mars 2008 Statut Membre Derniè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 !
0
elt93 Messages postés 46 Date d'inscription jeudi 13 mars 2008 Statut Membre Derniè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.
0
Rejoignez-nous