Aquí se trata de lo que lo haría:
#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
tipificado en un navegador. Implementador de avisos. Puntos de bonificación por usar NSDecimal
en lugar de double
.
explicación de lo que está pasando:
Esencialmente estamos haciendo desplazamiento de bits, pero en la base 10 en lugar de la base 2. Cuando el usuario escribe un número (por ejemplo: 6), que el número existente "cambio" dejó un lugar decimal (por ejemplo: 0.000 => 00.00), multiplica el número escrito por 0.01 (6 => 0.06), y lo agrega a nuestro número existente (00.00 => 00.06). Cuando el usuario ingresa otro número (ej: 1), hacemos lo mismo. Mueva a la izquierda (00.06 => 00.60), multiplique el número ingresado por 0.01 (1 => 0.01) y agregue (00.60 => 00.61). El propósito de almacenar el número es NSMutableArray
es simplemente una conveniencia para facilitar la eliminación. No es necesario, sin embargo. Solo una conveniencia.
Cuando el usuario pulsa el botón Eliminar (si hay uno), tomamos el último número introducido (por ejemplo: 1), lo multiplicamos por 0.01 (1 => 0.01), lo restamos de nuestro número (0.61 => 0.6), y luego cambie nuestro número a la derecha un lugar decimal (0.6 => 0.06). Repite esto mientras tengas números en tu matriz de números ingresados. Deshabilite el botón de borrar cuando esa matriz esté vacía.
La sugerencia de usar NSDecimal
es simplemente para permitir números de muy alta precisión.
¿Por qué los votos a favor? ¡Esta es una gran pregunta! –