Arrondir un float

Résolu
didi59650
Messages postés
77
Date d'inscription
mercredi 5 avril 2006
Statut
Membre
Dernière intervention
9 mai 2006
- 14 avril 2006 à 14:17
f0xi
Messages postés
4205
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
12 mars 2022
- 14 avril 2006 à 15:42
je transforme mon string en float avec "strtofloat"
Comment preciser que je veux 2 chiffre aprés la virgule??

7 réponses

f0xi
Messages postés
4205
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
12 mars 2022
37
14 avril 2006 à 14:44
a la question :
il ne connait pas roundto

je repond :
USES MATH; !!!!

a la question :
comment je transforme l'extended en string??

je repond :
VOIR MON PREMIER MESSAGE, AVEC LA FONCTION FORMAT !!!!
3
f0xi
Messages postés
4205
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
12 mars 2022
37
14 avril 2006 à 14:21
utilise plutot Format :

var F : extended;
begin
F := pi;
label1.caption := format('%.2f',[F]);
end;

voir mon tuto sur format : utilisation de format()
0
f0xi
Messages postés
4205
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
12 mars 2022
37
14 avril 2006 à 14:27
ooops autant pour moi c'est l'inverse que tu veux :

var F : extended;
begin
F := StrToFloat( Copy(S, 1, Pos(DecimalSeparator,S)+2 ) );
end;

ou encore :

uses math;

var F : extended;

begin

F := RoundTo(StrToFloat(S),-2);

end;
0
didi59650
Messages postés
77
Date d'inscription
mercredi 5 avril 2006
Statut
Membre
Dernière intervention
9 mai 2006

14 avril 2006 à 14:33
il ne connait pas roundto
0

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

Posez votre question
didi59650
Messages postés
77
Date d'inscription
mercredi 5 avril 2006
Statut
Membre
Dernière intervention
9 mai 2006

14 avril 2006 à 14:39
je croix que sa marche mais comment je transforme l'extended en string??
0
didi59650
Messages postés
77
Date d'inscription
mercredi 5 avril 2006
Statut
Membre
Dernière intervention
9 mai 2006

14 avril 2006 à 14:45
c bon c comme un float merci
0
f0xi
Messages postés
4205
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
12 mars 2022
37
14 avril 2006 à 15:42
LOL!

mmm, si je peu te donner un conseil, lit l'aide delphi et commence deja par apprendre les bases ...

il y'a des choses que l'on doit connaitre par coeur pour devenir un bon coder, les types en font partis.

pourquoi il faut les connaitres par coeurs ?
parce qu'on les utilises tout le temps en partout, donc les connaitres et connaitres les principes et conventions qu'il y a autours est trés important.
ce serait une fastidieuse perte de temps si on devais a chaque fois se poser la question de a quoi sert ceci ou cela sur des choses aussi essentielle.

il faut au moins que tu connaisse les particularitée des types flottant.

Extended, est le type le plus grand et le plus precis des types flottant. si j'ecris :

var F : real;
begin
F := Pi * cos(A);
end;

F est de type real mais l'expression arithmetique "pi * cos(a)" est caculé en type Extended pour obtenir la plus grande precision possible.

aves l'experience tu remarqueras trés vite que les types flottant : Real, Real48 et Double sont completement inutile voir obsolete. (d'ailleur Real = Double donc l'un ou l'autre ... ce sont les memes juste le nom change), le type Real48 est garder uniquement dans un soucis de compatibilitée ascendante avec le Turbo Pascal.
car les deux types qui seront le plus utiliser sont Extended (grande precision) et Single (precision raisonnable et suffisante dans beaucoup de cas).

sans parler des problemes de comparaison avec les type Real, Real48 et Double.
car Delphi compare les valeurs flottante egalement en type Extended.
Comme il y a une erreur de precision au passage des Real, Double en extended les comparaisons renvois des resultat erronés.
avec le type Single il y a beaucoup moins d'erreur, neanmoins il faut toujours comparer des valeurs Extended.
exemple :
var F : extended;
begin
F := 555/899;
if F = 555/899 then ...
end;

si F n'est pas de type extended il risque d'y avoir une erreur de comparaison car l'expression 555/899 est elle de type extended.
donc meme si visuellement les chiffres sont egaux (pour nous humains), le CPU lui vois une grosse difference entre les deux.

donc pour comparer un flottant d'un certain type dans une exepression il faut transtyper l'expression dans le meme type :

var F : real;
begin
F := 555/899;
if F = Real(555/899) then ...
end;

il existe bien sur d'autre type flottant, comp, currency...
malgrés cela, Comp est maudit de la meme façon que Real48, compatibilité ascendante ... quand le type INT64 n'existait pas encore... donc a oublier.

Currency quand a lui est exclusivement reservé au calcul monaitaires, donc a ne pas utiliser dans des calculs geometrique ou necessitant une bonne precision au dela de la 4eme decimale (cos, sin, tan ect...)

reste donc, comme je le disais plus haut, Extended et Single, les deux seul type flottant a utiliser.
Single offre une bonne precision sur 7 decimales
Extended offre une grande precision sur 19 decimales

la ou il faut savoir prendre Double ou Extended c'est sur l'utilisation multi-platforme.
Extended n'est pas trés bien portable sur certaine platforme (processeur non x86), je pense que borland nous parle la des platformes speciales tel les station sur processeur non IA-32 ou IA-64
(RISC donc)

donc si le programme ne s'etend que sur des compatible PC (qu'il soit Linux/Windows) le type Extended ne devrait pas poser de probleme les CPU etant les memes ... peu etre aprés un probleme d'implementation du type Extended dans l'architecture systeme de Linux.
donc la oui, on prefereras l'utilisation du type Double plutot qu'Extended.

mais c'est bien sur, le seul petit HIC du type extended.
pour une utilisation purrement windows, le type Extended ne pose aucun probleme et serait meme recommandé.
de toute façon, les conditions de compilation permettent de modifier facilement le code, sans intervention du developpeur, selon la platforme (linux/windows).
0