Цель c: проверить, является ли целое число / целое число / число - PullRequest
15 голосов
/ 13 августа 2010

В цели c, как я могу проверить, является ли строка / NSNumber целым числом или целым числом

Ответы [ 6 ]

36 голосов
/ 13 августа 2010

Если вы пытаетесь определить, имеет ли NSString числовое значение или нет, попробуйте использовать 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
}
12 голосов
/ 13 августа 2010

Вы можете использовать метод intValue на NSString:

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

Вот документация Apple для него - он вернет 0, если это не допустимое целое число: http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html#//apple_ref/occ/instm/NSString/intValue

Надеюсь, это поможет!

4 голосов
/ 09 апреля 2013

Я поместил это в мою категорию NSString (Util).

- (BOOL) isInt {
    if ([self isEqualToString:@"0"])
        return YES;
    return (self.intValue != 0);
}
2 голосов
/ 03 июня 2015

Для NSString, если вы используете intValue / integerValue, существуют определенные случаи, которые не обрабатываются, поскольку учитывается только начало строки.

Например, @ "bl3h" не считалось целым числом, но@ "3h" дал вывод 3

Мое решение для NSString:

Использование:

NSCharacterSet *charSet = [NSCharacterSet characterSetWithCharactersInString:strName];

NSCharacterSet *numSet = [NSCharacterSet decimalDigitCharacterSet];

if([numSet isSupersetOfSet: charSet])
{
     // It is an integer (or it contains only digits)
}
2 голосов
/ 13 августа 2010

Чтобы проверить, является ли NSNumber целым числом, попробуйте:

const char *t = [(NSNumber *)value objCType];
if (strcmp("i", t) == 0); // YES if integer
0 голосов
/ 13 августа 2010
if( [(NSString *)someString intValue] )
{ /* Contains an int fosho! */ }

if( [(NSNumber *)someNumber intValue] )
{ /* Contains an int wich is not 0.... :D */ }

Вы можете сначала определить, является ли это NSString или NSNumber, используя

[Object isKindOfClass: [NSString class]] и т. Д.

- boolValue - charValue - decimalValue- doubleValue - floatValue - intValue - integerValue - longLongValue - longValue - shortValue - unsignedCharValue - unsignedIntegerValue - unsignedIntValue - unsignedLongLongValue - unsignedLongValue * unsignedLong * * методы * unsignedSigned 100 все значения - все равно - 100 значенийУ NSString есть несколько похожих.

...