NSNumber хранения поплавка. Пожалуйста, никаких научных обозначений? - PullRequest
1 голос
/ 05 января 2009

Мой код выглядит так

NSNumber *inputToNumber = [NSNumber numberWithFloat:[textField.text floatValue]];

значение из текстового поля фактически является номером телефона. Хранится в NSNumber как надоедливая (2.0) 78966e + 08

Как я могу просто заставить NSNumber хранить его как 0207896608?

Ответы [ 7 ]

34 голосов
/ 05 января 2009

Я думаю, что основная идея сохранить номер телефона в NSNumber ошибочна:

  • как вы различаете числа с или без 0?
  • как вы храните телефонные номера из других стран?

Я бы использовал NSString вместо NSNumber.

9 голосов
/ 05 января 2009

То, что он называется числом, не означает, что «телефонный номер» является числом в том же смысле, что и «5» или «пи».

Либо вы должны рассматривать телефонный номер как строку, либо создать класс модели TelephoneNumber для представления каждого из них.

5 голосов
/ 06 января 2009

Учтите, что в мире есть места, где числа не имеют ведущих нулей и где число с ведущим 0 не совпадает с числом без начального 0.

05843924 != 5843924

Так что перестаньте лениться с этими NSNumber взломами и создайте свой собственный класс телефонных номеров.

2 голосов
/ 05 января 2009

Научная нотация используется на майских компьютерных языках в качестве вывода по умолчанию очень больших (или очень маленьких) чисел. Если вы хотите, чтобы число выводилось в виде десятичного числа, вам необходимо указать формат вывода (реализация зависит от языка.)

Кроме того, Julesjacobs является правильным. Вы не должны использовать FLOAT для номера телефона, так как он подвержен ошибкам двоичного округления. Использование INT или STRING избавит вас от головной боли.

0 голосов
/ 05 января 2009

Эй, ребята, что вы об этом думаете, Кажется, это полностью соответствует моим целям. Только Великобритания в настоящее время будет беспокоиться о локализации, когда у меня будет шанс.

Я использую это, чтобы сохранить номер

NSNumber *inputToNumber = [NSNumber numberWithLongLong:(long long)[[textField.text stringByReplacingOccurrencesOfString:@" " withString:@""] longLongValue]];

И этот метод форматирует мой номер телефона и заботится о вышеупомянутом 0, упомянутом.

-(NSString *)phoneNumberString:(NSNumber *)phoneNumber {
    //Add a zero because NSNumber won't save a preceeding zero
    NSString *telephoneString = [[NSString alloc] initWithFormat:@"0%@", [phoneNumber stringValue]];

    if (telephoneString.length >= 4) {
        NSString *firstPart = [[NSString alloc] initWithString: [telephoneString substringToIndex:4]];
        NSString *secondPart = [[NSString alloc] initWithString: [telephoneString substringFromIndex:4]];

        //Add the two parts together with a space inbetween
        NSString *formattedTelephoneString = [NSString stringWithFormat:@"%@ %@", firstPart, secondPart];

        //send it back to the cellForRow TableCell Method
        [firstPart release];
        [secondPart release];
        [telephoneString release];

        return formattedTelephoneString;    
    }
    else {
        return telephoneString; 
    }
}

Спасибо за все комментарии. Я отмечу ответ как тот, кто предложил NSString, так как я боюсь, что вернусь к использованию NSString для этого вместо моего вышеупомянутого решения.

0 голосов
/ 05 января 2009

Если вам нужно разобраться с ним как с числами, возможно, вам следует разбить его на части и хранить каждую часть как целое число.

01112223333
country code 0
area code 111
prefix 222
number 3333

Или вы можете хранить все это как строку, если вам не нужно манипулировать ею.

0 голосов
/ 05 января 2009

Вы храните номер телефона в памяти? Вы должны рассмотреть возможность использования целого числа или строки. Может быть:

NSNumber *inputToNumber = [NSNumber numberWithInt:[textField.text intValue]];
...