Как преобразовать NSString в NSNumber без использования numberfromstring


Я хочу преобразовать 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. У меня есть текстовое поле, где при попытке ввести числа в текстовое поле поведение выглядит следующим образом... В 3.0: - позволяет ввести 7 цифр и 2 дробных значения (I отформатировали его так). Я отформатировал и локализовал номера вместе с разделителями запятых в зависимости от выбранной страны. Он отлично работает в 3.0 и 3.1.2

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

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

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

2 ответа:

[NSNumber numberWithInteger:[theString integerValue]];
[NSNumber numberWithDouble:[theString doubleValue]];

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

Правка:

Чтобы удалить запятые, используйте stringByReplacingOccurrencesOfString перед выполнением вышеуказанных действий.

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

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

theSet = [NSCharacterSet characterSetWith...];
theString = [[theString componentsSeparatedByCharactersInSet:theSet] componentsJoinedByString:@""];

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

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

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

Используйте стандартные c lib sscanf с форматером или 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 берет строку, содержащую целое число, и возвращает значение в виде int.