2010-10-30 19 views

risposta

81

Un doppio è un tipo C, non un oggetto Objective-C. Quindi si utilizza C getta:

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

Credo NSDouble è la controparte obiettivo C, per favore correggetemi se' m sbagliato –

+3

@Joe D: C'è solo NSInteger (che è un typedef per int * o * long a seconda di 32/64 bit), ma c'è NSNumber, che include tipi di dati C in un oggetto. –

4

una semplice conversione di cui sopra è abbastanza buono anche se si potrebbe desiderare di utilizzare piano() o ceil() funzioni prima.

+1

Ho trovato questo importante soprattutto nel contesto della domanda che richiede precisione per i pagamenti. Ho trovato numeri semplici come 230 convertiti in 229 dopo la conversione dei numeri interi. –

+3

Credo che sia una cattiva pratica usare il floating point per la rappresentazione dei prezzi. Il modo corretto è usare interi (in centesimi, quindi il prezzo di $ 2 è 200) e convertirli in "2.00" solo in uscita. Inoltre Cocoa fornisce la classe NSDecimalNumber utilizzata da iOS per la rappresentazione dei prezzi. – Vladimir

1

intValue è un metodo per un'istanza NSNumber. Per il tipo di scala come int, double e float, non sono di tipo classe. Quindi, non hanno metodi. Alcune lingue come C# possono racchiudere int, o double come oggetto, e possono essere trasferite l'una all'altra da una sub-routine.

-6
double myDouble = 3.2; 

int myInt = @(myDouble).intValue; 

esempio di codice Io in realtà uso:

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

-1: questo è un modo molto rivoluzionario e inefficiente di conversione. Essenzialmente stai creando un oggetto da un primitivo solo per afferrare un altro valore primitivo. Se avessi questo in un ciclo, questo avrebbe probabilmente un impatto notevole. – FreeAsInBeer

+0

la complessità è costante. Questo è tutto ciò che mi interessa. No, non è evidente. –

+2

Come è il tuo codice meno complesso, o anche più leggibile, di '(int) myDouble'? – FreeAsInBeer

Problemi correlati