Garder la partie entière d'un float ???

Signaler
Messages postés
122
Date d'inscription
mercredi 16 avril 2003
Statut
Membre
Dernière intervention
22 juillet 2006
-
Messages postés
706
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
27 janvier 2009
-
Bonjour,


J'aimerai savoir comment faire pour ne garder que la partie entière d'un float.
J'ai essayé de "caster" le float en int, et j'ai aussi essayé la fonction floor().
Dans l'ensemble ça marche, mais le problème c'est que lorsque la partie décimale du float est égale à zéro
ex: 94.0000000
ça m'arrondi le nombre à 93 au lieu de le laisser à 94.


Est ce que quelqu'un aurait une solution.


Merci

Tintin 72

5 réponses

Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
1
Ce bout de code marche très bien avec un cast pour éviter les warnings:


int main(
int argc,
char *argv[])


{



float fNb;



int iNb;


fNb = 94.000000;


iNb = (
int)fNb;


cout << iNb << endl;



return 0;


}

Shell
Messages postés
706
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
27 janvier 2009
4
salut,

si ca marche pas, c'est parce que qd tu ecris : float f = 94.0, suivant
ta machine, il se peut qu'en fait f vaile 93.999998 ou qqc du genre.
c'est parce que 94.0 n'a pas d'écriture finie en base 2.



a+
Messages postés
122
Date d'inscription
mercredi 16 avril 2003
Statut
Membre
Dernière intervention
22 juillet 2006

Houlaa ça m'arrange po du tout !

En fait, j'ai une fonction qui retourne des résultats de divisions en float.
Ce que je voudrais faire c'est récupérer la partie entière pour ensuite l'utiliser en tant que int.
Mais d'aprés ce que tu dis, même si le résultat d'une division tombe juste par (ex: 94) j'aurai en fait 93.9999998 ??????

Y aurait pas un moyen de résoudre ce genre de pb ?

Tintin 72
Messages postés
706
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
27 janvier 2009
4
tu peux pas demander une précision infinie a une machine sur laquelle
les reels sont codés que sur une taille finie. si tes algorithmes sont
pas stables numériquement, et que tu travailles avec des nombres reels,
alors ton probleme est mal posé.

si t'es sur que ta division tombe juste, travaille depuis le debut avec des entiers voila tout...

sinon change tes egalités entre float par une difference qui doit etre petite ...



a+
Messages postés
706
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
27 janvier 2009
4
sinon utilises ceil (entier le plus proche) plutot que floor ou le cast en int (partie entiere).

au moins si ca tombe juste a coté a cause des arrondis sur les reels, tu vas re trouver le bon entier



a+