2011-08-22 16 views
6

Estoy tratando de Dectect si un NSString es un número flotante, por exemple: @ "- 73.041382"detectar si NSString es un número flotante

Pero cuando trato con este método puedo obtener un resultado erróneo:

-(bool) isNumeric:(NSString*) checkText{ 

NSNumberFormatter* numberFormatter = [[[NSNumberFormatter alloc] init] autorelease]; 
NSNumber* number = [numberFormatter numberFromString:checkText]; 
if (number != nil) { 
    return true; 
} 
return false; 

}

Alguien tiene una idea !?

Gracias

+0

¿Qué quiere decir por "número equivocado"? –

+0

Quiero decir que el método devuelve falso; – Maxime

+1

Podría tener algo que ver con la configuración regional. –

Respuesta

6
-(bool) isNumeric:(NSString*) checkText{ 
    return [[NSScanner scannerWithString:checkText] scanFloat:NULL]; 
} 

i actualmente no estoy en mac, así que no puedo comprobarlo, creo que sirve

+0

sí funciona! ¡Gracias! – Maxime

+0

Funciona para 1 o 1.2 o 1b pero no b1 – naz

+0

no, no significa que sea un numérico puro. Por ejemplo, podría volverse verdadero para @ "3.111fffff" – Jacky

10

he encontrado la respuesta:

-(bool) isNumeric:(NSString*) checkText{ 

NSNumberFormatter* numberFormatter = [[[NSNumberFormatter alloc] init] autorelease]; 
//Set the locale to US 
[numberFormatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"] autorelease]]; 
//Set the number style to Scientific 
[numberFormatter setNumberStyle:NSNumberFormatterScientificStyle]; 
NSNumber* number = [numberFormatter numberFromString:checkText]; 
if (number != nil) { 
    return true; 
} 
return false; 
} 

Gracias!

+0

Esto valida números pares en el formato 9.0E-4 e invalida 9.0E-4xxx. Esta es la única solución que encontré que hace eso. ¡Gracias! –

Cuestiones relacionadas