Преобразование NSString в NSNumber

Возможный дубликат:
Как преобразовать NSString в NSNumber

Как я могу преобразовать NSString (например, «пять») в NSNumber (5). Я посмотрел, могут ли какие-либо вопросы ответить на Stack Overflow, но кажется, что многие люди просят преобразовать строку в строку, а не наоборот.

Это работает примерно так и должно, по крайней мере, начать:

 NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; formatter.numberStyle = NSNumberFormatterSpellOutStyle; NSArray *testStrings = @[@"Five",@"twenty-four",@"Nineteen",@"One hundred forty-two"]; for (NSString *test in testStrings) { NSNumber *result = [formatter numberFromString:[test lowercaseString]]; NSLog (@"String %@ -> %@ as number",test,result); } 

Некоторые вещи, о которых нужно подумать:

  • Вы захотите правильно установить локаль либо в какой-либо фиксированной локали (если эти строки все исходят с сервера или что-то на одном постоянном языке), либо позволяют ему плавать в локали пользователя (если пользователь входит в строки)
  • Как указывали другие, этот анализатор может быть недостаточно сложным для ваших нужд. Например, последняя строка «тридцать три» фактически возвращает неверный результат. Остальные работают правильно. Как пояснил @JonathanGrynspan, если вы расскажете нам больше о своей цели здесь, кто-то может предложить что-то лучше.

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

Для этого нет встроенных функций по нескольким причинам:

1) Это нечетко. Чтобы сказать 2013 (год), я могу сказать «две тысячи тринадцать», «две тысячи тринадцать», «двадцать тринадцать», «два тринадцати лет» и т. Д. Это даже не учитывает диалектические различия.

2) Это не легко локализовать. Правила для громкого разговора варьируются в широких пределах между языками (поэтому один набор правил не может быть действительно использован для каждой локали), и Apple предоставляет только API, которые могут использоваться во всем мире. Большинство людей на этой планете не говорят по-английски.

3) Предполагается, что пользователь может писать правильно. «Четверо» – это не число. «Сорок».

Если вы скажете нам, почему вы пытаетесь это сделать (то есть, какова цель), может быть, мы можем предложить лучший подход?

 NSNumberFormatter * f = [[NSNumberFormatter alloc] init]; [f setNumberStyle:NSNumberFormatterDecimalStyle]; NSNumber * myNumber = [f numberFromString:@"42"]; 

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