2012-01-15 10 views
6

¿Hay alguna forma de formatear un NSNumber con 0 y decimales? Por ejemplo, necesito tener la capacidad de escribir 4.5 y 000. Actualmente lo tengo donde permitirá decimales, pero no los 0.NSNumberFormatter 0 y decimales principales

NSNumberFormatter *f = [[NSNumberFormatter alloc] init]; 
f.numberStyle = NSNumberFormatterNoStyle; 

NSString *myString = [f numberFromString:@"4.5"]; 
NSLog(@"myString: %@",myString); 

NSString *myOtherString = [f numberFromString:@"000"]; 
NSLog(@"myOtherString:%@",myOtherString); 

La salida desde arriba sería: 'miCadena: 4,5' y 'myOtherString: 0'. Necesito poder hacer tanto '4.5' como '000' como salida.

He revisado la "Guía de formato de datos" de Apple sin mucho éxito.

+0

Usted sabe, creo que estamos respondiendo a este mal. Estamos tomando una cadena y convirtiéndola en un número y luego de vuelta a una cadena? Y creo que lo que se quiere es un número. ¿Puede decirnos si realmente quiere una cadena o un número? ¿Y a partir de qué comienza? Tu código y tu pregunta están un poco sesgados. Cheers – markhunte

+0

@markhunte Noté lo mismo, así que proporcioné implementaciones opcionales para crear el 'NSNumber'. También está la cuestión de que 'NSNumber' sea necesario, así que proporcioné implementaciones opcionales sin usar' NSNumber'. – zaph

+0

@markhunte La entrada es de un UITextField. Es para tamaños que se describen como: 0000,000,00,0,1,2,3 ... así como 4.5,5.25, etc. El tipo CoreData es flotante y la propiedad es NSNumber (porque quiero poder ordenarlo en una tabla agrupada, numéricamente: 0,1,2,11,23 no 0,1,11,2,23). Se muestra en la celda de la tabla como texto. La conversión es de cadena a número a cadena. Tonto, lo sé. Sin embargo, NSNumericSearch no parece funcionar para iOS, al menos para mí.Estuve ignorando 000 en el pasado, pero algunos clientes quieren esa habilidad. – Kurt

Respuesta

1

Usted podría intentar algo como:

NSString *myString = [NSString stringWithFormat:@"%03f", [myNSNumber floatValue]]; 

Esto, a raíz de la printf format, imprimirá su número de forzar al menos 3 dígitos que desea imprimir y rellenando con 'cualquier espacio vacío de 0.

+1

Se imprimirá el formato @ "% 03f": 4.500000 y 0.000000. – zaph

+0

para mí strDonation = [NSString stringWithFormat: @ "0% d", [strDonation integerValue]]; w0rked – iMeMyself

6

Tenga en cuenta que [f numberFromString:@"4.5"] devuelve un no NSNumber* un NSString*

quieres algo como esto:

NSNumberFormatter *f = [[NSNumberFormatter alloc] init]; 
f.numberStyle = NSNumberFormatterNoStyle; 

NSNumber *myNumber; 
NSString *myString; 

myNumber = [f numberFromString:@"4.5"]; 
[f setNumberStyle:kCFNumberFormatterDecimalStyle]; 
myString = [f stringFromNumber:myNumber]; 
NSLog(@"myString: %@",myString); 

myNumber = [f numberFromString:@"000"]; // Note that the extra zeros are useless 
[f setFormatWidth:3]; 
[f setPaddingCharacter:@"0"]; 
myString = [f stringFromNumber:myNumber]; 
NSLog(@"myString: %@",myString); 

salida NSLog:

miCadena: 4.5
miCadena: 000

Si no tienes cuerdas para empezar, solo crea numbe r como:

myNumber = [NSNumber numberWithFloat:4.5]; 
myNumber = [NSNumber numberWithInt:0]; 

o simplemente utilizar el formato estándar:

myString = [NSString stringWithFormat:@"%.1f", [myNumber floatValue]]; 
myString = [NSString stringWithFormat:@"%03d", [myNumber intValue]]; 

O si usted no necesita una representación NSNumber sólo tiene que utilizar el formato estándar:

myString = [NSString stringWithFormat:@"%.1f", 4.5]; 
myString = [NSString stringWithFormat:@"%03d", 0]; 
+0

Sé que los 000 son inútiles. No es un valor, es un descriptor de tamaño. El campo de entrada puede tener: 0000,000,00 o enteros o flotantes. Creo que debo hacer esto de otra manera. Puede que tenga que usar cadenas y configurar un ordenamiento personalizado, aunque lo intenté con NSNumericSearch sin alegría. – Kurt

1

¿Qué tal esto como una variación en el tema para 000's

NSNumber *myNumber; 
NSString *myString [email protected]"000" ; 
NSString * myStringResult; 
NSNumberFormatter *f = [[NSNumberFormatter alloc] init]; 
f.numberStyle = NSNumberFormatterNoStyle; 
[f setHasThousandSeparators:FALSE]; //-- remove seperator 
[f setMinimumIntegerDigits:[myString length ]]; //-- set minimum number of digits to display using the string length. 



myNumber = [f numberFromString:myString]; 



myStringResult = [f stringFromNumber:myNumber]; 
NSLog(@"myStringResult: %@",myStringResult); 
+0

Así que su respuesta es .. actualizada. gracias – markhunte

+0

Saludos, solo lo estaba haciendo para el caso 000. Pero en el último momento del impulso antes de publicar, lo intenté con 45 en lugar de 4.5 por error. Es por eso que agregué que funciona para ambos números. Pero como dices, no es lo que no era mi verdadera intención de todos modos. – markhunte

0

Como esto se pregunta a menudo y los documentos de Apple apestan, esta es la respuesta que la gente va a buscar. El siguiente enlace tiene dos soluciones. Uno usando NSString stringWithFormat: y el otro usando NSNumberFormatter.

https://stackoverflow.com/a/11131497/1058199

Cuestiones relacionadas