2008-11-13 15 views
47

Total Newbie Frage, aber das macht mich verrückt! Ich versuche dies:Wie konvertiere ich in Objective C ein float zu einem int?

myInt = [myFloat integerValue]; 

aber ich erhalte eine Fehlermeldung sagen, im Wesentlichen nicht Integer auf Schwimmern nicht funktioniert.

Wie mache ich das?

+3

Schwimmer sind Primitive, sie sind nicht Objective-C Objekte daher können Sie nicht verwenden [myFloat Integer] auf sich. Wenn es NSObject nicht erweitert, können Sie keine Nachrichten an es übergeben. – seanalltogether

+0

Die Overkill-Methode ist: [[NSNumber numberWithFloat: myFloat] GanzzahlWert] (aber Sie sollten Cast verwenden, wirklich) – Kornel

+1

@PorneL ziemlich sicher in 2013 können Sie '[@ (myFloat) ganzzahligerWert]' –

Antwort

120

Ich bin mir ziemlich sicher, dass C -Stil Guss Syntax funktioniert in Objective C, so versuchen Sie das auch:

int myInt = (int) myFloat; 

Es könnte eine Compiler-Warnung, zumindest zum Schweigen bringen.

+0

aber mit das ich die dezimalwerte wegwerfe, würde ich gerne so machen: myFloat = 0.999 = myInt = 1 aber mit deinem code bekommt myInt 0, wie kann ich das machen? –

+3

@GabrielMolter werfen Sie einen Blick auf 'Roundf' - es wird auf die nächste ganze Zahl runden :) –

+0

OK! Vielen Dank! Genau das, was ich brauche! –

11

was mit falsch:

int myInt = myFloat; 

bedenken, dies würde die Standardrundungsregel verwenden, die gegen Null ist (dh -3.9f wird -3)

2

Zur Unterstützung von Abwickeln, denken Sie daran, dass Objective-C eine Obermenge von C ist, anstatt eine völlig neue Sprache.

Alles, was Sie in regulären alten ANSI C tun können, kann in Objective-C getan werden.

7
int myInt = (int) myFloat; 

Arbeitete gut für mich.

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

Nun, das ist eine Option. Wenn Sie den Umweg mögen, könnte ich an einige mit NSString denken. Warum einfach, wenn es eine komplizierte Alternative gibt? :)

+0

Wenn du es in eine NSNumber verwandelst, warum nicht '@ (myFloat) .intValue' verwenden? –

+0

@ BenC.R.Leggiero, weil die Antwort wurde im August 2010 gegeben und es ist immer noch gültig, obwohl optimierbar. NSNumber Literale wurden mit LLVM/CLang 3.1 eingeführt, wenn ich mich nicht irre, was im Jahr 2012 veröffentlicht wurde. Aber selbst dann hätte ich vielleicht etwas Zeit gebraucht, um selbst darüber zu lernen. Fühlen Sie sich frei, Ihre eigene Antwort hinzuzufügen, die in diesen Tagen datiert ist, Literale verwendend, und Sie können sogar eine Aufwertung von mir verdienen. –

4

Sie können auch C's lroundf(myFloat) verwenden.


Ein unglaublich nützlicher Tipp: In Xcode-Editor, Code eingeben, wie sagt

myInt = roundf(someFloat); 

dann steuern/Rechtsklick auf roundf und Wechsel zu Definition (oder einfach die Befehlstaste).

Sie werden dann deutlich die sehr lange Liste der verfügbaren Funktionen zu Ihnen sehen. (Es ist unmöglich, sich an alle zu erinnern, also verwende einfach diesen Trick.)

Zum Beispiel ist es wahrscheinlich, dass lrintf in dem vorliegenden Beispiel das ist, was Sie wollen.

Ein weiterer Tipp: Dokumentation zu diesen vielen Funktionen zu bekommen. In Ihrer Terminal.app (oder irgendeiner Shell - nichts mit Xcode zu tun, nur die normale Terminal.app) einfach geben man lrintf und es wird Ihnen vollständige Informationen geben. Hoffe es hilft jemandem.

0

Hier ist ein lapidarer Ansatz, der im Jahr 2012 eingeführt wurde:

myInt = @(myFloat).intValue; 
Verwandte Themen