2010-08-13 17 views
15

Dans c objectif, comment puis-je vérifier si une chaîne/NSNumber est un entier ou intObjectif c: Vérifier si entier/int/Numéro

+0

S'il vous plaît expliquer plus en détail ce que vous voulez dire. Les deux NSString et NSNumber peuvent être convertis en int ou NSInteger, mais ni * est * un int ou NSInteger. – Chuck

+0

Ok désolé, j'ai besoin de savoir si un String ou Int est un int/integer. Voir je divise un nombre par un autre nombre, mais le nombre qu'un utilisateur place peut ne pas être un int. J'ai besoin de vérifier si c'est un nombre entier – Daniel

Répondre

12

Vous pouvez utiliser la méthode intValue sur NSString:

NSString *myString = @"123"; 
[myString intValue]; // returns (int)123 

Voici la documentation Apple pour cela - il retournera 0 s'il ne s'agit pas d'un nombre entier valide: http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html#//apple_ref/occ/instm/NSString/intValue

Hope that helps!

+0

Comment puis-je trouver si une variable est une chaîne? – Daniel

+0

Comme dans, vous voulez vérifier et voir si une entrée de l'utilisateur est juste une ancienne chaîne ou un nombre? Comme je l'ai dit ci-dessus, intValue renvoie 0 lorsque NSString n'est pas un nombre entier valide.Dites que vous obtenez des informations à partir d'un UITextView - [[myTextView text] intValue] retournera un int valide si possible, ou 0 s'il ne peut pas être validé comme un int. – codykrieger

+0

Eh bien voir le problème est. Parfois, l'utilisateur n'entre aucune entrée. parce que ce n'est pas nécessaire. Et puisque j'utilise un tableau et en attrape l'objet. Je reçois *** - [NSCFArray objectAtIndex:]: index (3) au-delà des limites (3) j'ai besoin de vérifier si le tableau est en quelque sorte valide? – Daniel

2

Pour vérifier si un NSNumber si un essai entier:

const char *t = [(NSNumber *)value objCType]; 
if (strcmp("i", t) == 0); // YES if integer 
33

Si vous essayez de déterminer si oui ou non un NSString a une valeur numérique ou non, essayez d'utiliser NSNumberFormatter.

-(BOOL) stringIsNumeric:(NSString *) str { 
    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
    NSNumber *number = [formatter numberFromString:str]; 
    [formatter release]; 
    return !!number; // If the string is not numeric, number will be nil 
} 
+4

Je pensais que j'étais le seul qui a fait le !! pirater pour contraindre à booléen. Agréable! –

+3

Cette question est meilleure que la [réponse approuvée] (http://stackoverflow.com/a/3473806/377384) parce que cela vous donne un résultat vrai/faux. La réponse approuvée ne le fait pas. –

+2

C'est mieux, car la réponse acceptée ne fonctionne pas comme prévu si vous vérifiez une chaîne avec des lettres commençant par un nombre. L'exemple "1234asdf" retournera 1234, et non 0, cela renvoie NON. Et "000" retournera 0 et vous pourriez penser que c'est faux, mais ce n'est pas – jcesarmobile

0

Vous pouvez d'abord déterminer si ofcourse est un NSString ou NSNumber en utilisant

[Objet isKindOfClass: [classe NSString]] etc ...

- boolValue - charValue - decimalValue - doubleValue - floatValue - intValue - entierValeur - longLongValue - LongValue - shortValue - unsignedCharValue - unsignedIntegerValue - unsignedIntValue - unsignedLongLongValue - unsignedLongValue - unsignedShortValue

sont toutes les méthodes de NSNumber pour obtenir ses valeurs. NSString a obtenu quelques similaires.

3

J'ai mis ceci dans ma catégorie NSString (Util).

- (BOOL) isInt { 
    if ([self isEqualToString:@"0"]) 
     return YES; 
    return (self.intValue != 0); 
} 
2

Pour NSString, si vous utilisez intValue/IntegerValue, il y a certains cas qui ne sont pas traitées comme il prend en considération que le début de la chaîne.

Par exemple @ "bl3h" n'a pas été considéré comme un entier, mais @ "3h" a donné une sortie de 3

Ma solution pour NSString:

Utilisation:

NSCharacterSet *charSet = [NSCharacterSet characterSetWithCharactersInString:strName]; 

NSCharacterSet *numSet = [NSCharacterSet decimalDigitCharacterSet]; 

if([numSet isSupersetOfSet: charSet]) 
{ 
    // It is an integer (or it contains only digits) 
}