2011-08-22 18 views
6

Sto cercando di Dectect se un NSString si tratta di un numero float, per exemple: @ "- 73,041,382 mila"Rilevare se NSString è un numero float

Ma quando provo con questo metodo posso ottenere un risultato sbagliato:

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

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

}

qualcuno ha un'idea !?

Grazie

+0

Cosa si intende per "risultato sbagliato"? –

+0

Intendo il metodo return false; – Maxime

+1

Potrebbe avere qualcosa a che fare con il locale. –

risposta

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

io non sono attualmente su Mac, quindi non posso controllare, spero che aiuta

+0

sì, funziona! Grazie! – Maxime

+0

Funziona per 1 o 1.2 o 1b ma non b1 – naz

+0

no, non significa che è un puro numerico. Per exmaple, potrebbe restituire true per @ "3.111fffff" – Jacky

10

ho trovato la risposta:

-(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; 
} 

Grazie!

+0

Convalida i numeri pari nel formato 9.0E-4 e annulla 9.0E-4xxx. Questa è l'unica soluzione che ho trovato che lo fa. Grazie! –

Problemi correlati