2011-08-22 14 views
6

Próbuję dectect jeśli NSString jest to liczba float, dla exemple: @ „- 73.041382”wykryć, czy NSString jest liczbą pływak

Ale gdy próbuję z tym sposobem mogę uzyskać zły wynik:

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

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

}

Ktoś ma pomysł !?

Dzięki

+0

Co masz na myśli przez „złym wyniku”? –

+0

Mam na myśli metodę return false; – Maxime

+1

Może mieć coś wspólnego z lokalizacją. –

Odpowiedz

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

Obecnie nie jestem na mac więc nie mogę sprawdzić, nadzieję, że to pomaga

+0

tak, działa! dzięki! – Maxime

+0

Działa dla 1 lub 1.2 lub 1b, ale nie b1 – naz

+0

nie, nie oznacza to, że jest to czysta cyfra. Dla przykładu, może zwrócić wartość true dla @ "3.111fffff" – Jacky

10

znalazłem odpowiedź:

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

Dzięki!

+0

Umożliwia to sprawdzenie numerów parzystych w formacie 9.0E-4 i unieważnia 9.0E-4xxx. To jedyne rozwiązanie, które znalazłem, kto to robi. Dzięki! –

Powiązane problemy