Arrondir un nombre selon nombre dans une listbox... [Résolu]

elt93 46 Messages postés jeudi 13 mars 2008Date d'inscription 9 février 2009 Dernière intervention - 17 mai 2008 à 18:25 - Dernière réponse : f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention
- 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 !
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 18 mai 2008 à 07:50
3
Merci
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%" />

Merci f0xi 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de f0xi
Meilleure réponse
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 19 mai 2008 à 02:46
3
Merci
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%" />

Merci f0xi 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de f0xi
JulioDelphi 2354 Messages postés dimanche 5 octobre 2003Date d'inscription 18 novembre 2010 Dernière intervention - 17 mai 2008 à 19:17
0
Merci
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.
Commenter la réponse de JulioDelphi
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 17 mai 2008 à 19:26
0
Merci
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%" />
Commenter la réponse de f0xi
elt93 46 Messages postés jeudi 13 mars 2008Date d'inscription 9 février 2009 Dernière intervention - 17 mai 2008 à 19:46
0
Merci
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.
Commenter la réponse de elt93
elt93 46 Messages postés jeudi 13 mars 2008Date d'inscription 9 février 2009 Dernière intervention - 17 mai 2008 à 20:06
0
Merci
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
Commenter la réponse de elt93
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 18 mai 2008 à 07:46
0
Merci
<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%" />
Commenter la réponse de f0xi
elt93 46 Messages postés jeudi 13 mars 2008Date d'inscription 9 février 2009 Dernière intervention - 18 mai 2008 à 10:57
0
Merci
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 !
Commenter la réponse de elt93
elt93 46 Messages postés jeudi 13 mars 2008Date d'inscription 9 février 2009 Dernière intervention - 18 mai 2008 à 16:52
0
Merci
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.
Commenter la réponse de elt93

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.