2008-11-13 11 views
47

Yeni kullanıcı sorusu ama bu beni çıldırtıyor!Bir Float'ı Objective C'deki int'ye nasıl dönüştürebilirim?

myInt = [myFloat integerValue]; 

ama TamsayıDeğer yüzen çalışmaz esasen söyleyerek bir hata alıyorum: Bunu çalışıyorum.

Nasıl yaparım?

+3

yüzer temellerdir, dolayısıyla bunun üzerine [myFloat TamsayıDeğer] kullanamazsınız değil objektif-c nesnelerdir. NSObject öğesini uzatmazsa, iletilere iletemezsiniz. – seanalltogether

+0

Overkill yöntemi şöyledir: [[NSNumber numberWithFloat: myFloat] integerValue] (ama gerçekten kullanmalısınız, gerçekten) – Kornel

+1

@porneL 2013'te oldukça emin olabilirsiniz [[@ (myFloat) integerValue] ' –

cevap

120

C eminim tarzı döküm sözdizimi Objective C çalışır, bu yüzden de bunu deneyin:

int myInt = (int) myFloat; 

en azından, bir derleyici uyarı susturmaya olabilir.

+0

döndürür Bu ondalık değerleri atmak, bu gibi yapmak istiyorum: myFloat = 0.999 = myInt = 1 ama kodunuzu kullanarak myInt 0 alır, nasıl yapabilirim? –

+3

@GabrielMolter 'roundf''e bir göz atın - en yakın tam sayıya yuvarlanacak :) –

+0

Tamam! Teşekkür ederim! Tam olarak ihtiyacım olan şey! –

11

nesi: akılda

int myInt = myFloat; 

ayı bu sıfıra doğru varsayılan yuvarlama kuralı kullanacağız (yani -3.9f olur -3)

2

Gevşemeyi desteklemek için, Objective-C'nin tamamen yeni bir dil yerine C'nin bir üst kümesi olduğunu unutmayın.

Normal eski ANSI C'de yapabileceğiniz her şey Objective-C'de yapılabilir.

7
int myInt = (int) myFloat; 

Benim için iyi çalıştı.

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

Eh, bu bir seçenektir. Yolculuğu sevdiyseniz, NSString kullanarak bazılarını düşünebilirim. Karmaşık bir alternatif olduğunda, neden kolay?

+0

Eğer bir NSNumber'e çevirecekseniz, neden '@ (myFloat) .intValue' kullanılmıyor? –

+0

@ BenC.R.Leggiero, çünkü cevap Ağustos 2010'da verildi ve optimize olmasına rağmen hala geçerli. NSNumber literalleri, 2012 yılında piyasaya sürülmeyecek kadar fazla yanılmadığı takdirde LLVM/CLang 3.1 ile tanıştılar. Fakat o zaman bile, kendim hakkında bilgi edinmek için biraz zamana ihtiyacım vardı. Bu günlere tarihlenen kendi cevabınızı eklemekten çekinmeyin, bültenleri kullanın ve hatta benden daha fazla kazanabilirsiniz. –

4

Ayrıca C'nin lroundf(myFloat)'u da kullanabilirsiniz.


olağanüstü kullanışlı ipucu: o zaman/kontrol tanımı-roundf ve Git sağ tıklayıp

myInt = roundf(someFloat); 

dedikleri gibi Xcode en düzenleyicisinde, kodunuzu girin (veya basitçe komuta-tıklama).

işlevlerinin çok uzun bir listesini size açıkça göreceksiniz. (Hepsini hatırlamak imkansız, bu yüzden sadece bu numarayı kullanın.)

Örneğin, eldeki örnekte, büyük olasılıkla lrintf istediğin şeydir.

Diğer bir ipucu: bu birçok işlev hakkında bilgi almak için. Terminal.app (veya herhangi bir kabuk - Xcode, sadece normal Terminal.app ile ilgisi yoktur) sadece man lrintf yazın ve size tam bilgi verecektir. Umarım birisine yardım eder.

0

İşte 2012 yılında başlanan bir daha kısa ve öz bir yaklaşım:

myInt = @(myFloat).intValue; 
İlgili konular