web-dev-qa-db-fra.com

Comment convertir un float en int dans Objective C?

Total question de débutant, mais cela me rend fou! J'essaye ceci:

myInt = [myFloat integerValue]; 

mais j'obtiens une erreur en disant essentiellement integerValue ne fonctionne pas sur les flottants. 

Comment fait-on ça?

50
Nick Locking

Je suis presque sûr que la syntaxe de transtypage de style C fonctionne dans Objective C, alors essayez aussi:

int myInt = (int) myFloat;

Cela pourrait faire taire un avertissement du compilateur, au moins.

124
unwind

quel est le problème avec:

int myInt = myFloat;

gardez à l’esprit que vous utiliserez la règle d’arrondi par défaut, qui est proche de zéro (c’est-à-dire que -3.9f devient -3) 

11
Alnitak
int myInt = (int) myFloat;

A bien fonctionné pour moi. 

int myInt = [[NSNumber numberWithFloat:myFloat] intValue];

Eh bien, c'est une option. Si vous aimez le détour, je pourrais penser à certains utilisant NSString. Pourquoi facile, quand il y a une alternative compliquée? :) 

8
Hermann Klecker

Vous pouvez également utiliser le lroundf(myFloat) de C.


Un conseil incroyablement utile: dans l'éditeur de Xcode, tapez votre code comme par exemple

myInt = roundf(someFloat);

puis contrôlez/cliquez avec le bouton droit de la souris sur roundf et Aller à la définition _ (ou cliquez simplement sur Commande).

Vous verrez alors clairement la très longue liste des fonctions disponibles à vous. (Il est impossible de se souvenir de tous, utilisez donc cette astuce.)

Par exemple, dans l'exemple en question, il est probable que lrintf soit ce que vous voulez.

Un autre conseil: pour obtenir de la documentation sur ces nombreuses fonctions. Dans votre Terminal.app (ou tout shell - rien à voir avec Xcode, uniquement le Terminal.app normal), tapez simplement man lrintf et vous obtiendrez des informations complètes. J'espère que ça aide quelqu'un.

6
jmcharnes

Pour faciliter le déroulement, rappelez-vous qu’Objective-C est un sur-ensemble de C, plutôt qu’un langage complètement nouveau.

Tout ce que vous pouvez faire avec l’ancien ANSI C normal peut être fait en Objective-C.

2
Matthew Schinckel

Voici une approche plus concise qui a été introduite en 2012:

myInt = @(myFloat).intValue;
0
Ben Leggiero