Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1451 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  cast de float en int

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

cast de float en int

n°2190765
antiseptiq​ueincolore
Posté le 18-05-2013 à 08:41:02  profilanswer
 

Bonjour j'ai un petit doute
Quand on cast un float en int à la c style ((int)value), est-ce que c'est toujours un floor qui est pris?
 
Merci

mood
Publicité
Posté le 18-05-2013 à 08:41:02  profilanswer
 

n°2190784
gilou
Modérateur
Modzilla
Posté le 18-05-2013 à 13:29:02  profilanswer
 

En C++, on ne fais plus (int) value mais static_cast<int>(value), sauf si on aime vivre dangereusement à l'age de pierre.
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2190790
antiseptiq​ueincolore
Posté le 18-05-2013 à 15:07:32  profilanswer
 

gilou a écrit :

En C++, on ne fais plus (int) value mais static_cast<int>(value), sauf si on aime vivre dangereusement à l'age de pierre.
 
A+,


 
C'est juste un float, qui est casté, c'est pas grand chose. Il manque une étape dans l'écriture, qui aurait du être un arrondi du float.
D'où ma question. est-ce qu'on est sur que ça fait un floor tout le temps?

n°2190792
gilou
Modérateur
Modzilla
Posté le 18-05-2013 à 15:25:43  profilanswer
 

Ceci devrait répondre à ta question.

Code :
  1. #include <stdio.h>
  2. #include <math.h>
  3. int main()
  4. {
  5.     float aFloat   = -12.545f;
  6.     int anInt      = (int) floor(aFloat + 0.5);
  7.     int anotherInt = (int) (aFloat + 0.5);
  8.     printf("Floor: %d and Cast: %d\n",anInt, anotherInt); 
  9.    
  10.     // You have to take care with negative numbers
  11.     int yetAnotherInt = 0;
  12.     if (aFloat >= 0)
  13.         yetAnotherInt = (int) (aFloat + 0.5);
  14.     else
  15.         yetAnotherInt = (int) (aFloat - 0.5);
  16.     printf("Floor: %d and Cast: %d\n",anInt, yetAnotherInt);
  17.    
  18.     return 0;
  19. }


 
Il n'y a pas que des nombres positifs dans la vie d'un programme...
La bonne conversion est donc:
(value >= 0) ? (int)(value + 0.5) : (int)(value - 0.5);
 
A+,


Message édité par gilou le 18-05-2013 à 15:31:09

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2190794
antiseptiq​ueincolore
Posté le 18-05-2013 à 15:33:36  profilanswer
 

ha nan, sinon ça voudrait dire que 2.999 serait arrondi à 3
 
Mais en tout cas, pour le nombre négatif, va falloir que je regarde si ça peut se produire  :jap:  

n°2190795
gilou
Modérateur
Modzilla
Posté le 18-05-2013 à 15:37:39  profilanswer
 

Citation :

ha nan, sinon ça voudrait dire que 2.999 serait arrondi à 3

Ce qui est tout a fait la bonne manière de convertir un float en entier.
Si tu veux un floor ou un ceil, eh bien tu le fais explicitement, et tu ne te reposes pas sur un cast hasardeux.
A+,


Message édité par gilou le 18-05-2013 à 15:38:02

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  cast de float en int

 

Sujets relatifs
[Résolu][MySQL] Cast d'un integer vers un champ timeCast et template
String to floatMéthode n'appartenant qu'à une classe fille - dynamic_cast
float et api google map (et ie 8)float et double sur architecture 32bits
[résolu]Tester l'égalité entre 2 float (incompréhensible...)Probléme de float
pas de cast as float sur mysql 4.0.x???double, float, int : resultat inattendu sur un cast
Plus de sujets relatifs à : cast de float en int


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR