2011-01-27 13 views
5

So che questo è stato chiesto alcune volte in passato, ma tutto ciò che provo è fallito. Ho un tastierino numerico personalizzato con un UILabel. Quando clicco su "1", l'UILabel ne visualizza uno. Ora, ecco quello che sto cercando di fare:Come inserire automaticamente una cifra decimale sull'iPhone?

  • Quando mi ha colpito il tasto '1' che voglio: 0,01 nel UILabel
  • seguito da un tasto '4' che voglio: 0.14 nella UILabel
  • Poi un '6': 1,46
  • ecc, ecc

Ora la tastiera e UILabel stanno lavorando grande. Ho solo bisogno di far funzionare i decimali ora. Qualsiasi codice di esempio sarebbe fantastico (e dove dovrei inserirlo nella mia applicazione). Fammi sapere se vuoi vedere il mio codice finora. Abbastanza diretto. Grazie a tutti!

+2

Perché i downvotes? Questa è una bella domanda! –

risposta

4

Ecco di come lo farei:

#define NUMBER_OF_DECIMAL_PLACES 2 
NSMutableArray *typedNumbers = ...; //this should be an ivar 
double displayedNumber = 0.0f; //this should also be an ivar 

//when the user types a number... 
int typedNumber = ...; //the number typed by the user 
[typedNumbers addObject:[NSNumber numberWithInt:typedNumber]]; 
displayedNumber *= 10.0f; 
displayedNumber += (typedNumber * 1e-NUMBER_OF_DECIMAL_PLACES); 
//show "displayedNumber" in your label with an NSNumberFormatter 

//when the user hits the delete button: 
int numberToDelete = [[typedNumbers lastObject] intValue]; 
[typedNumbers removeLastObject]; 
displayedNumber -= (numberToDelete * 1e-NUMBER_OF_DECIMAL_PLACES); 
displayedNumber /= 10.0f; 
//show "displayedNumber" in your label with an NSNumberFormatter 

digitato in un browser. Caveat Implementor. Punti bonus per l'utilizzo di NSDecimal anziché di double.

spiegazione di ciò che sta succedendo:

Stiamo facendo essenzialmente po spostamento, ma in base 10, invece di base 2. Quando l'utente digita un numero (es: 6), noi "shift" il numero esistente lasciato una cifra decimale (es: 0.000 => 00.00), moltiplicare il numero digitato per 0.01 (6 => 0.06) e aggiungerlo al numero esistente (00.00 => 00.06). Quando l'utente digita un altro numero (es: 1), facciamo la stessa cosa. Spostate a sinistra (00.06 => 00.60), moltiplicate il numero digitato per 0.01 (1 => 0.01) e aggiungete (00.60 => 00.61). Lo scopo di memorizzare il numero è un NSMutableArray è semplicemente una comodità per rendere più facile la cancellazione. Non è necessario, comunque. Solo per comodità

Quando l'utente preme il pulsante Elimina (se ce n'è uno), prendiamo l'ultimo numero inserito (es: 1), lo si moltiplica essere 0,01 (1 => 0,01), sottrarlo dal nostro numero (0,61 => 0.6), quindi spostare il numero a destra di una posizione decimale (0,6 => 0,06). Ripeti finché hai numeri nella serie di numeri inseriti. Disattiva il pulsante Elimina quando quella matrice è vuota.

Il suggerimento di utilizzare NSDecimal è semplicemente quello di consentire numeri di altissima precisione.

+0

Ok, scusate per tutte le domande, ma sto costruendo la mia prima applicazione e sono ancora molto nuovo all'obiettivo-c. Potresti spiegare brevemente cosa sta facendo il tuo codice? So che hai commentato molto bene, ma non sono ancora sicuro di come usare questo codice :) –

+0

@Alex hai appena finito di modificare la risposta :) –

Problemi correlati