cast de float en int

cast de float en int - C++ - Programmation

Marsh Posté le 18-05-2013 à 08:41:02    

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

Reply

Marsh Posté le 18-05-2013 à 08:41:02   

Reply

Marsh Posté le 18-05-2013 à 13:29:02    

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é!  --
Reply

Marsh Posté le 18-05-2013 à 15:07:32    

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?

Reply

Marsh Posté le 18-05-2013 à 15:25:43    

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é!  --
Reply

Marsh Posté le 18-05-2013 à 15:33:36    

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:  

Reply

Marsh Posté le 18-05-2013 à 15:37:39    

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é!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed