2011-01-27 16 views
5

Sé que esto se ha preguntado algunas veces en el pasado, pero todo lo que intento está fallando. Tengo un teclado numérico personalizado con un UILabel. Cuando toco el '1', UILabel muestra uno. Ahora esto es lo que estoy tratando de hacer:¿Cómo insertar automáticamente un lugar decimal en el iphone?

  • Cuando pulso el botón de '1' Quiero: 0,01 en el UILabel
  • seguido de un botón de '4' Quiero: 0,14 en el UILabel
  • a continuación, un '6': 1,46
  • etc, etc.

Ahora el teclado y UILabel están trabajando muy bien. Solo necesito que los decimales funcionen ahora. Cualquier código de muestra sería genial (y dónde debería ubicarlo en mi aplicación). Avíseme si quiere ver mi código hasta el momento. Muy claro. ¡Gracias a todos!

+2

¿Por qué los votos a favor? ¡Esta es una gran pregunta! –

Respuesta

4

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.

+0

De acuerdo, disculpe todas las preguntas, pero estoy compilando mi primera aplicación y todavía soy muy nuevo en Objective-c. ¿Podría explicar brevemente qué está haciendo su código? Sé que lo comenté muy bien, pero todavía no estoy seguro de cómo usar este código :) –

+0

@Alex acaba de editar la respuesta :) –

Cuestiones relacionadas