Transformer un nombre décimal et l'arrondir à 2 chiffres après la virgule

Messages postés
12
Date d'inscription
jeudi 26 février 2004
Statut
Membre
Dernière intervention
16 septembre 2004
- - Dernière réponse : japee
Messages postés
1715
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
2 décembre 2019
- 6 mai 2004 à 16:45
Bonjour à tous et à toutes.

Un grand merci à DELPHIPROG qui a bien répondu à mon problème de chaine de carractère.
Cependant, je n'arrive toujours à faire ce que je veux!
J'explique : J'ai des nombres décimaux que j'extrais d'une table, ex : 1,5698563 ce nombre comporte une virgule.
C'est pour cela que je voulais transformer la virgule en point pour pouvoir utiliser la fonction Formatfloat, du type :
formatfloat ('0.00' , 1.5698563) et obtenir en sortie 1.57
c'est à dire la valeur arrondie à 2 chiffres après la virgule.
La chaine de carractère reçue de type String est alors transtypée comme suit :

Ma procédure.......
var
toto : string;
titi : Double;
Resultat : String;

begin
// chaine reçue après transformation de virgule en point.
// par ex : toto :=1.5698563;
titi:=0;
titi:=StrToFlaot(toto);
Resultat:=FormatFloat('0.00' , titi); // Message d'erreur ICI !
end;

Lorsque je compile j'ai le message d'erreur suivant : type String et Extended non compatible.... Pourtant il faut bien passer en paramètre un réel dans le second paramètre de la fonction Formatfloat ?

Y a t-il une autre Méthode que Formatfloat ?
Peut-on avec un nombre décimal sous la forme 1,5698563 l'arrondir directement sous la forme 1,57 ?

Si quelqu'un a la solution à ce problème, je vous remercie par avance, car je suis bloqué dans l'application que j'essais de développer.

ROWAN : microcom@netcourrier.com
Afficher la suite 

2 réponses

Meilleure réponse
Messages postés
702
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
1 octobre 2009
1
1
Merci
Salut

Ben, à part "StrToFlaot' à la ligne du dessus c'est correct !
Tu peux aussi utiliser la fonction FloatToStrF :
Resultat := FloatToStrF(titi,ffFixed,15,2);
mais il n'y a pas de raison que tu aies une erreur de compilation!
Quant à tronquer la chaîne 2 caractères après le point, c'est possible, mais ça tronque, ça n'arrondi pas !
Resultat := Copy(toto,1,pos('.',toto)+2);

Kénavo

Code, Code, Codec !

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 200 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Kenavo
Messages postés
1715
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
2 décembre 2019
2
1
Merci
Rowan :

Tu déclares
toto: String // Ok
toto := 1.5698563; // pas Ok, là c'est un Real !

il faudrait déclarer :
toto := '1,5698563';

sinon là
titi := StrToFloat(toto); // ça ne passera jamais !

Tes ennuis semble venir du fait que tu ne différencies pas :
1.5698563 qui est un Real (avec le point comme séparateur décimal),
'1,5698563' qui est un String (avec la virgule comme séparateur décimal)

C'est pourtant essentiel !

En espérant t'avoir éclairé.

Bonne prog' !

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 200 internautes nous ont dit merci ce mois-ci

Commenter la réponse de japee