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

BakaSora 4 Messages postés jeudi 15 mai 2003Date d'inscription 10 mai 2005 Dernière intervention - 8 mai 2005 à 21:37 - Dernière réponse : yopai_v 48 Messages postés jeudi 7 septembre 2006Date d'inscription 21 avril 2010 Dernière intervention
- 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

cs_ManChesTer 378 Messages postés vendredi 20 octobre 2000Date d'inscription 11 décembre 2013 Dernière intervention - 8 mai 2005 à 21:58
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
BakaSora 4 Messages postés jeudi 15 mai 2003Date d'inscription 10 mai 2005 Dernière intervention - 9 mai 2005 à 00:22
0
Merci
Génial, merci à vous :).
Commenter la réponse de BakaSora
japee 1799 Messages postés vendredi 27 décembre 2002Date d'inscription 19 juillet 2018 Dernière intervention - 9 mai 2005 à 19:22
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
japee 1799 Messages postés vendredi 27 décembre 2002Date d'inscription 19 juillet 2018 Dernière intervention - 9 mai 2005 à 22:09
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
WhiteHippo 1270 Messages postés samedi 14 août 2004Date d'inscription 5 avril 2012 Dernière intervention - 9 mai 2005 à 23:03
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
cs_ManChesTer 378 Messages postés vendredi 20 octobre 2000Date d'inscription 11 décembre 2013 Dernière intervention - 9 mai 2005 à 23:10
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
japee 1799 Messages postés vendredi 27 décembre 2002Date d'inscription 19 juillet 2018 Dernière intervention - 10 mai 2005 à 00:02
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
yopai_v 48 Messages postés jeudi 7 septembre 2006Date d'inscription 21 avril 2010 Dernière intervention - 9 sept. 2006 à 21:58
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
WhiteHippo 1270 Messages postés samedi 14 août 2004Date d'inscription 5 avril 2012 Dernière intervention - 8 mai 2005 à 23:39
-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.