Как преобразовать NSString в NSNumber без использования numberfromstring - PullRequest
5 голосов
/ 02 июля 2010

Я хочу преобразовать NSString в NSNumber без использования numbreFromString: метод? NumbreFromString: metgod странно действует в 4.0. Поэтому я хочу использовать альтернативу для преобразования NSString в NSNumber. Пожалуйста, помогите мне ....

+ (NSString *)formatText:(NSString *) text withLocalSettings:(BOOL) isLacale {  

    NSNumber *aNsNumber= [numberFormatter numberFromString: text];  
    NSString *returnString = [NSString stringWithString:[numberFormatter stringForObjectValue:aNsNumber]];

    if(isLacale) {
        return returnString;
    }
    else {
        return [NSString stringWithFormat:@"%lf",[aNsNumber doubleValue]];
    }
} 

0

Я занимаюсь разработкой приложения, которое необходимо для запуска приложения в версиях 3.0 и 4.0. У меня есть текстовое поле, где, когда я пытаюсь ввести числа в текстовом поле, поведение выглядит следующим образом ... IN 3.0: - Он позволяет вводить 7 цифр и 2 дробных значения (я отформатировал это так). Я отформатировал и локализовал числа вместе с разделением запятыми в зависимости от выбранной страны. Отлично работает в 3.0 и 3.1.2

IN 4.0: - Позволяет вам ввести только 4 цифры, и после ввода 5-й цифры текстовые поля становятся пустыми. Когда вы вводите 5-й номер и ничего не отображается, он начинается с 1-го числа и продолжает то же самое до 4 числа. Пример: - когда вы вводите 1234, текстовое поле появляется - 1234, а когда вы вводите 12345, текстовое поле появляется "". и когда вы введете 6, теперь он начинается с 6 и т. д.

Я использую NSNumberFormatter и метод numberfromstring для форматирования значений, введенных в текстовое поле.

Я не могу понять, почему это происходит так ... Пожалуйста, помогите мне ...

Ответы [ 2 ]

16 голосов
/ 02 июля 2010
[NSNumber numberWithInteger:[theString integerValue]];
[NSNumber numberWithDouble:[theString doubleValue]];

также floatValue, intValue, longLongValue, boolValue

Edit:

чтобы убрать запятые, используйте stringByReplacingOccurferencesOfString перед выполнением вышеупомянутого.

theString = [theString stringByReplacingOccurrencesOfString:@"," withString:@""];

чтобы удалить более одного символа, вы можете получить что-то, работающее с компонентамиSeparatedByCharactersInSet.

theSet = [NSCharacterSet characterSetWith...];
theString = [[theString componentsSeparatedByCharactersInSet:theSet] componentsJoinedByString:@""];
0 голосов
/ 02 июля 2010

iOS4 очень требователен, когда дело доходит до форматирования чисел.

В вашем примере кода вы передаете локаль - убедитесь, что десятичный разделитель в вашей строке соответствует тому, что определено в локали,Убедитесь, что вы вводите числа, которые правильно отформатированы (iOS4), то есть девять тысяч должны быть 9.000, а не 9000, если вы используете DecimalStyle.

Если вы настаиваете на использовании альтернативного парсера - sscanf atoi может бытьoption.

Используйте стандартную библиотеку sscanf с libter с formatter или atoi в зависимости от чисел, которые нужно преобразовать.

#include<stdio.h>

int main(int argc, char **argv) {

   char s[] = "1.2";
   double x;

   sscanf(s, "%lf", &x);
   printf("The decimal number was %g\n\n", x);

   return 1;
}

atoi принимает строку, содержащую целое число, и возвращает значение в виде целого числа.

...