2010-10-30 12 views

Odpowiedz

81

podwójna jest typu C nie przedmiotem Cel C. Stąd użyć C rzuca:

double myDouble = 3.2; 
int myInt = (int)myDouble; 
+0

wierzę NSDouble jest celem C odpowiednik, proszę mnie poprawić, jeśli I” Mylę. –

+3

@Joe D: Jest tylko NSInteger (który jest typedef na int * lub * long w zależności od 32/64bit), ale istnieje NSNumber, który owija C typy danych w obiekt. –

4

tylko konwersja wspomniano powyżej, jest wystarczająco dobre, choć może chcesz użyć głosu() lub ceil() funkcje wcześniej.

+1

Stwierdziłem, że jest to ważne, szczególnie w kontekście pytania wymagającego dokładności dla płatności. Znalazłem proste liczby, takie jak 230, konwersja do 229 po konwersji całkowitej. –

+3

Uważam, że niewłaściwą praktyką jest używanie zmiennoprzecinkowych do reprezentacji cen. Poprawnym sposobem jest użycie liczb całkowitych (w centach, więc cena 2 $ to 200) i przekonwertuj te wartości do "2.00" tylko na wyjściu. Również Cocoa zapewnia klasę NSDecimalNumber, która jest używana przez iOS do reprezentacji cen. – Vladimir

1

intValue to metoda dla instancji NSNumber. Dla typu skali, takiego jak int, double i float, nie są one typem klasy. Więc nie mają żadnych metod. Niektóre języki, takie jak C#, mogą zawijać int, lub podwójnie jako obiekt, i mogą być przenoszone do siebie podprocedurą.

-6
double myDouble = 3.2; 

int myInt = @(myDouble).intValue; 

Przykładowy kod faktycznie używać:

NSNumber * percentLike1 = @(@(self.percentLike.doubleValue*100).integerValue); 
+3

-1: To bardzo okrężny i nieefektywny sposób konwersji. Zasadniczo tworzysz obiekt z prymitywu, aby uzyskać inną prymitywną wartość. Jeśli miałbyś to w pętli, prawdopodobnie miałoby to zauważalny wpływ. – FreeAsInBeer

+0

złożoność jest stała. To wszystko, na czym mi zależy. Nie, nie jest to zauważalne. –

+2

W jaki sposób Twój kod jest mniej złożony, a nawet bardziej czytelny niż '(int) myDouble'? – FreeAsInBeer

Powiązane problemy