Arrondir un real

momohbj Messages postés 9 Date d'inscription samedi 18 septembre 2004 Statut Membre Dernière intervention 17 mars 2007 - 24 nov. 2004 à 01:45
momohbj Messages postés 9 Date d'inscription samedi 18 septembre 2004 Statut Membre Dernière intervention 17 mars 2007 - 6 déc. 2004 à 19:21
mon probleme, une somme d'une colonne que cette derniere
sont des montants (champs calculé)
donc quand je calcule la somme ,les montants ne sont pas reelement à deux chiffres alors il calcule à des chiffres infini aprés la virgule malgres que ces montants sont formatés à 2 ch apres la virgule.
merci!

11 réponses

cs_Bestiol Messages postés 833 Date d'inscription dimanche 6 janvier 2002 Statut Membre Dernière intervention 3 novembre 2005 1
24 nov. 2004 à 02:06
po très explicite tout ça ... %-6
0
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
24 nov. 2004 à 03:05
Si le problème consiste à arrondir à 2 chiffres après la virgule, tu peux utiliser la fonction "Format" ainsi :

var
Montant: String;
Flt: Real // (ou tout autre type réel)

Flt := 3.1451;
Montant := Format('%.2f', [Flt]);


(tu obtiens Montant = 3,15)

Pour plus de précisions, voir "Chaînes de format" dans l'aide en ligne de Delphi.

N'oubliez pas de valider "Réponse acceptée" si ça vous convient, de toute manière vous ne pouvez pas valider autre chose ! :big)
0
MoveX Messages postés 230 Date d'inscription vendredi 9 mai 2003 Statut Membre Dernière intervention 16 juillet 2005 1
24 nov. 2004 à 07:26
sinon, pour arrondir simplement un reel comme cest si bien dit dans le titre, tu peux utiliser la fonction Trunc(real)= integer;
0
cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 5
24 nov. 2004 à 13:59
Si tu veux afficher un résultat arrondi à 2décimales, tu fais comme dit Japee.
Si tu veux que les réels soient réelement arrondis à deux décimales, utilise une fonction du genre :
uses
  Math;

{$R *.DFM}

function Precision(Value : real; Decimales : integer) : real;
var
  n : Extended;
begin
  n :=  round(intPower(10,Decimales));
  Result := Round(Value * n) / n;
end;


Avec la solution Japee :
3.506666 (affiché 3.51) + 2.426666 (affiché 2.43) = 5.933332 sera affiché 5.93
Avec la fonction
Precision(3.506666,2)+Precision( 2.426666,2) = 5.94

Ken@vo
____________________
Code, Code, Codec !
0

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

Posez votre question
cs_grandvizir Messages postés 1106 Date d'inscription samedi 8 novembre 2003 Statut Membre Dernière intervention 3 septembre 2006 22
24 nov. 2004 à 19:55
4ème possibilité:

var s : string;
begin
Str(ExtendedValue:0:2,s);
result:=s;
end;

Pour convertir le point en virgule, on met:
Str(ExtendedValue:0:2,s);
if Pos('.',s)<>0 then s[Pos('.',s)]:=',';
result:=s;

===========
Validez les réponses si ok...

0
rsca_en_force Messages postés 14 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 8 mai 2005
24 nov. 2004 à 21:56
ou alors :2:2 pour deux decimale ...
0
momohbj Messages postés 9 Date d'inscription samedi 18 septembre 2004 Statut Membre Dernière intervention 17 mars 2007
26 nov. 2004 à 00:39
comme je suis debutant en prog(delphi),expliquez moi avec precision.
donc j"ai un champs calculé"M"(un produit de2 autres champs),
le resultat est formaté à 2 chiffres aprés la virgule.
le prob: la somme de ce champs(resultats) de tout les enregistts
est faux malgres qu'il est a deux chiffres apres la virgule.
exp:
2,34 +1,33 +1,55 me donne 5,24 au lieu de 5,22.

merci!
0
cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 5
26 nov. 2004 à 07:53
Tu dis :"j"ai un champs calculé"M"(un produit de2 autres champs),le resultat est formaté à 2 chiffres aprés la virgule."

Formaté en valeur ou pour l'affichage ?

Le fait de formater un réel avec deux chiffres après la virgule pour l'afficher (conversion reel->chaine) ne modifie en rien la valeur du réel.

Tu n'additionnes pas un réel qui vaut 2,34 mais un réel qui s'écrit 2,34 quand on le représente avec deux chiffres après la virgule. Tout ce que tu peux dire , c'est que 2,335 <= X < 2,345

Par contre formate M avec une fonction comme Precision(X,n) et la plus de problème, le réel n'a plus que deux chiffres après la virgule et ça ce calcule comme à l'école primaire.

Ken@vo
____________________
Code, Code, Codec !
0
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
30 nov. 2004 à 23:14
Alors, momohbj, ça répond à ta question ?

Le sujet est intéressant, tout n'est pas forcément dit...
J'ai personnellement "planché" là-dessus un petit moment.
J'ai d'autres approches qui pourraient se révéler intéressantes pour nous tous.
Mais si l'intérêt retombe...

Il y a pas mal de possibilités selon ce qu'on veut faire exactement.
Un sujet de source, quoi... mais sûr, sûr !

Kenavo > Merci à toi, je ne connaissais pas IntPower()... très utile à l'usage (ah, math.pas) ;)

Bonne prog', faut pas mollir :-p

N'oubliez pas de valider "Réponse acceptée" si ça vous convient, de toute manière vous ne pouvez pas valider autre chose ! :big)
0
cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 5
1 déc. 2004 à 08:13
Tu sais Japee,

Cette fonction je l'ai trouvée juste pour écrire à momohbj, en me disant que, quand même, elle devait bien exister. "Bon sang, mais c'est bien sûr ! L'unité Math.pas !"
J'allais mettre : exp(n*ln(10)) , mais c'est quand même moins clair que IntPower(10,n)

Tu vois, on molli pas !

Ken@vo
____________________
Code, Code, Codec !
0
momohbj Messages postés 9 Date d'inscription samedi 18 septembre 2004 Statut Membre Dernière intervention 17 mars 2007
6 déc. 2004 à 19:21
voilà.
je reformule ma question:
j'ai un champs calcaulé (M) sur la base d'un produit de deux autres champs (Q) et (PU) dont:
Q: Rèel, PU: Réel et le montant est aussi réel.
le champs (M) du DBGrid me donne un format à deux chiffre aprés la virgule.
par contre la somme de la colonne (M) me donne un resultat(somme) erroné.
donc à ma connaissance cette somme est calculée à base des
montants (M) à plusieures chiffres aprés la virgule.
alors le format de (M) n'est qu'un format visuel et non réel.
comme je suis débutant dans la programmation .veuillez m'expliquer en detail la solution de ce probleme.
parceque je n'est pas compris la methode de précision .

merci à vous!
0
Rejoignez-nous