2012-04-05 10 views
1

Ich habe dies versucht:Testing Saiten für Zahlen und Prozente mit NSNumberFormatter

NSNumberFormatter *testNumber=[NSNumberFormatter new]; 
    if (![testNumber numberFromString:someNSString]) 

Ich habe gesagt, dass die numberFromString zurück nil wenn someNSString ist keine Zahl.

Allerdings habe ich festgestellt, dass, wenn someNSString enthält, beispielsweise „5,9%“, dann ist dies angenommen wird, nicht eine Zahl, also mein Test oben geht, obwohl NSNumber selbst mit 5.9% als Zahl arbeiten kann nur fein.

Also, wie man elegant auf Zahlen gegen Nicht-Zahlen prüft, wenn Prozente als Zahlen eingeschlossen werden?

+0

Was meinen Sie mit "NSNumber selbst kann mit 5,9% arbeiten"? –

+0

Wenn ich den 'floatValue' einer Zeichenkette speichern, die" 5,9% "enthält, wird sie in NSNumber korrekt bei 0,059 gespeichert. Es kann abgerufen und als Float verwendet werden. – johnbakers

Antwort

0

Verwendung -[NSScanner scanFloat:]:

float testNumber; 
NSScanner* scanner = [NSScanner scannerWithString:someNSString]; 
if ([scanner scanFloat:&testNumber]) { 
    // A valid number, and it is stored in `testNumber` 
} else { 
    // Not a valid number, at least by floating-point standards 
} 

Natürlich, wenn Sie eigentlich gar nicht wollen, dass es in einem float am Ende, ersetzen -[NSScanner scanDouble:] oder -[NSScanner scanDecimal:].

Beachten Sie, dass Ihr floatValue Test nicht "einschließlich Prozent als Zahlen" enthält, es ignoriert einfach nachfolgende nicht numerische Zeichen.

+0

sehr interessant, danke – johnbakers

Verwandte Themen