NSNumber хранит значение с плавающей точкой.Пожалуйста, НИКАКИХ научных обозначений?

StackOverflow https://stackoverflow.com/questions/413535

Вопрос

Мой код выглядит примерно так

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

значение из текстового поля на самом деле является телефонным номером.Он хранится в NSNumber как раздражающий (2.0) 78966e +08

Как я могу просто получить NSNumber, чтобы сохранить его как 0207896608?

Это было полезно?

Решение

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

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

Другие советы

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

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

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

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

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

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

05843924 != 5843924

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

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

01112223333
country code 0
area code 111
prefix 222
number 3333

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

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

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

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

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

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 для этого вместо моего вышеупомянутого решения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top