Comment convertir le "Double" en "Integer"? [Résolu]

Messages postés
4
Date d'inscription
jeudi 15 mai 2003
Dernière intervention
10 mai 2005
- - Dernière réponse : yopai_v
Messages postés
48
Date d'inscription
jeudi 7 septembre 2006
Dernière intervention
21 avril 2010
- 9 sept. 2006 à 21:58
Comment convertir le "Double" en "Integer"?

SVP c'est urgent . Merci ;)
Afficher la suite 

Votre réponse

9 réponses

Messages postés
378
Date d'inscription
vendredi 20 octobre 2000
Dernière intervention
11 décembre 2013
0
Merci
pour arondir (12.51=13):

Moninteger:=round(Double);

Pour "couper" (12.51=12):
Moninteger:=Trunc(Double);

Bon Coding ....

ManChesTer.
Commenter la réponse de cs_ManChesTer
Messages postés
4
Date d'inscription
jeudi 15 mai 2003
Dernière intervention
10 mai 2005
0
Merci
Génial, merci à vous :).
Commenter la réponse de BakaSora
Messages postés
1799
Date d'inscription
vendredi 27 décembre 2002
Dernière intervention
19 juillet 2018
0
Merci
Merci WhiteHippo d'avoir attiré mon attention sur le fait que Round n'était pas très "mathématique".



Je n'y ai pas cru tout d'abord, et pourtant...



Extrait de l'aide de Delphi concernant Round :



"La fonction Round arrondit une valeur de type réel en valeur de type entier.

X est une expression réelle. Round renvoie une valeur Int64 qui
correspond à la valeur de X arrondie au nombre entier le plus proche. Si X se trouve exactement à mi-chemin entre deux nombres entiers, le résultat est toujours le nombre pair."



Ah ben ça alors !



Si je comprends bien, on est obligé de se la créer, notre fonction...



Que pensez-vous de ceci ?



function ReallyRound(Number: Extended): Int64;

begin

if (Frac(Number) * 2) >= 1 then

Result : = Trunc(Number) + 1

else Result := Trunc(Number);

end;



Bonne prog
Commenter la réponse de japee
Messages postés
1799
Date d'inscription
vendredi 27 décembre 2002
Dernière intervention
19 juillet 2018
0
Merci
Oups, désolé, WhiteHippo...



J'avais pas fait gaffe à ta fonction RoundCommercial.



J'ai failli réinventer la roue, quoi... (en la compliquant inutilement).



"Je promets de lire attentivement les posts avant d'intervenir" à copier 100 fois pour lundi matin.



Bonne prog'



japee
Commenter la réponse de japee
Messages postés
1270
Date d'inscription
samedi 14 août 2004
Dernière intervention
5 avril 2012
0
Merci
C'est pas bien grave tout ça

Pas de Cordialement ce soir, circonstances obligent :

"Que la force soit avec toi".
Commenter la réponse de WhiteHippo
Messages postés
378
Date d'inscription
vendredi 20 octobre 2000
Dernière intervention
11 décembre 2013
0
Merci
Pour info, le vrai round commercial (enfin l'officiel pour l'euro, le dolllard us&ca, la livre etc...) doit se calculer de la facon suivante :

Function CommercialRound(V:Real):Real;
begin
Result:=Trunc((v*1000)/10)/100;
end;

En fait 2.52999 = 2.52 2.5111= 2.51 2.555=2.55 etc ... (toujours en faveur du client....)


Bon Coding ....

ManChesTer.
Commenter la réponse de cs_ManChesTer
Messages postés
1799
Date d'inscription
vendredi 27 décembre 2002
Dernière intervention
19 juillet 2018
0
Merci
Bon, eh bien tout aura été dit sur le sujet, il me semble.



Échange très intéressant, merci les gars



Bonne prog', et bon coding bien cordial, lol
Commenter la réponse de japee
Messages postés
48
Date d'inscription
jeudi 7 septembre 2006
Dernière intervention
21 avril 2010
0
Merci
Bonjour à tous,
Eh bien, la prochaine fois que j'ai un problème je regarderai l'aide Delphi avant de crier au bug.
Donc, en fait, Round( 29 / 2 ) = 14, ce n'est pas un bug...

Pour ceux qui se posent la question le problème vient de la représentation machine des flottants (qui sait représenter de manière exacte 1/3, mais pas 1/2).
J'ai écrit une fonction qui corrige le problème (ah non, pardon, ce n'est pas un bug) :

function Round2(f : Extended) : Int64
begin
  Result := System.Round(f + 1e-9)
end;

Rigoureusement, ça ne corrige pas le problème dans tous les cas :
en effet, au delà d'un certaine valeur, le flottant ne sera pas affecté par 1e-9
(autrement dit : il faut creuser...)

Cordialement
Commenter la réponse de yopai_v
Messages postés
1270
Date d'inscription
samedi 14 août 2004
Dernière intervention
5 avril 2012
-1
Merci
Attention avec la fonction round !!!!

En Delphi c'est un "round statistique"

round(10.5) = 10
round(11.5) = 12

Pour un "round commercial" rapide et simple :

Function RoundCommercial (R:extended):LongInt;
begin
Result:= Trunc(R);
if Frac(R) >= 0.5 then Inc(Result);
end;

Cordialement.
Commenter la réponse de WhiteHippo

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.