Transformer un nombre décimal et l'arrondir à 2 chiffres après la virgule
cs_Rowan
Messages postés12Date d'inscriptionjeudi 26 février 2004StatutMembreDernière intervention16 septembre 2004
-
6 mai 2004 à 09:13
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 2021
-
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.
cs_Kenavo
Messages postés702Date d'inscriptionvendredi 21 mars 2003StatutMembreDernière intervention 1 octobre 20095 6 mai 2004 à 13:48
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);
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 6 mai 2004 à 16:45
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)