C: différence entre (int) x et floor (x)?

En C, quelle est la différence entre ces deux?

float myF = 5.6; printf( "%i \n", (int)myF ); // gives me "5" printf( "%ld \n", floor(myF) ); // also "5"? 

Quand l’un est-il préférable à l’autre?

Une grande différence est celle des nombres négatifs; si vous modifiez myF en -5.6 , la myF en int renvoie -5 tandis que floor(myF) vaut -6 .

Pour ce qui est préférable, en règle générale, je dirais de ne lancer que sur un int si vous savez que c’est ce dont vous avez besoin – et puisque vous posez la question ici, il est probable que vous souhaitiez probablement avoir la floor .

(Notez également qu’avec la mise en forme printf , %ld est un entier long; un double est %lf .)

floor(n) renvoie le sol mathématique de n , c’est-à-dire le plus grand entier non supérieur à n . (int)n renvoie la troncature de n , l’entier dont la valeur absolue n’est pas supérieure à celle de n . De même, ceil(n) renvoie le plafond mathématique de n , ou le plus petit entier non inférieur à n . Comme AraK l’a fait remarquer, le nombre renvoyé par floor() ou ceil() peut ne pas correspondre à la valeur de int .

Lorsque vous obtenez la floor de double, ce double “entier” peut ou non être représentable dans une variable de type int .

Le premier convertit votre valeur float en entier (et vous utilisez un spécificateur int dans l’appel printf).

Ce dernier utilise floor (de la bibliothèque de mathématiques C) pour renvoyer un double qui a été arrondi.

Voulez-vous que le résultat soit un entier ou un double?

Si vous voulez un entier, lancez; si vous voulez un double, utilisez le floor .

Par exemple, si vous voulez obtenir le cosinus de la valeur, vous devez simplement utiliser floor car cos prend un double.

Mais si vous voulez utiliser la valeur pour exit (il suffit de choisir une API aléatoire ici), vous devez lancer car exit prend un int.