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.
fonte
2011-01-27 19:49:06
Perché i downvotes? Questa è una bella domanda! –