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

Messages postés
46
Date d'inscription
jeudi 13 mars 2008
Dernière intervention
9 février 2009
- 17 mai 2008 à 18:25 - Dernière réponse :
Messages postés
4304
Date d'inscription
samedi 16 octobre 2004
Dernière intervention
9 mars 2018
- 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
Messages postés
4304
Date d'inscription
samedi 16 octobre 2004
Dernière intervention
9 mars 2018
- 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é 90 internautes ce mois-ci

Commenter la réponse de f0xi
Meilleure réponse
Messages postés
4304
Date d'inscription
samedi 16 octobre 2004
Dernière intervention
9 mars 2018
- 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é 90 internautes ce mois-ci

Commenter la réponse de f0xi
Messages postés
2354
Date d'inscription
dimanche 5 octobre 2003
Dernière intervention
18 novembre 2010
- 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
Messages postés
4304
Date d'inscription
samedi 16 octobre 2004
Dernière intervention
9 mars 2018
- 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
Messages postés
46
Date d'inscription
jeudi 13 mars 2008
Dernière intervention
9 février 2009
- 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
Messages postés
46
Date d'inscription
jeudi 13 mars 2008
Dernière intervention
9 février 2009
- 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
Messages postés
4304
Date d'inscription
samedi 16 octobre 2004
Dernière intervention
9 mars 2018
- 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
Messages postés
46
Date d'inscription
jeudi 13 mars 2008
Dernière intervention
9 février 2009
- 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
Messages postés
46
Date d'inscription
jeudi 13 mars 2008
Dernière intervention
9 février 2009
- 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.