1

我的代码看起来像这样

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

文本字段中的值实际上是一个电话号码。它作为烦人的 (2.0)78966e+08 存储在 NSNumber 中

我怎样才能让 NSNumber 将其存储为 0207896608?

4

7 回答 7

34

我认为将电话号码存储到 NSNumber 的基本想法是有缺陷的:

  • 你如何区分带或不带前导 0 的数字?
  • 您如何存储来自国外的电话号码?

我会使用 NSString 代替 NSNumber。

于 2009-01-05T16:33:23.853 回答
9

仅仅因为它被称为数字并不意味着“电话号码”是与“5”或“pi”相同的数字。

您应该将电话号码视为字符串,或者您应该创建一个 TelephoneNumber 模型类来表示每一个。

于 2009-01-05T17:39:56.667 回答
5

考虑到世界上有些地方的数字没有前导 0,并且带有前导 0 的数字与没有前导 0 的相同数字不同。

05843924 != 5843924

所以不要再懒惰了,NSNumber建立你自己的电话号码类。

于 2009-01-05T22:58:11.657 回答
2

科学记数法在许多计算机语言中用作非常大(或非常小)数字的默认输出。如果希望数字输出为十进制,则需要指定输出格式(实现因语言而异。)

此外,julesjacobs 是正确的。您不应将 FLOAT 用于电话号码,因为它会出现二进制舍入错误。使用 INT 或 STRING 将为您省去很多麻烦。

于 2009-01-05T16:27:41.040 回答
-1

如果您需要能够将其作为数字处理,也许您应该将其分解为多个部分,并将每个部分存储为一个整数。

01112223333
country code 0
area code 111
prefix 222
number 3333

或者,如果您不需要操作它,您可以将整个内容存储为字符串。

于 2009-01-05T16:53:29.707 回答
-3

您是否将电话号码存储在浮点数中?您应该考虑使用整数或字符串。也许:

NSNumber *inputToNumber = [NSNumber numberWithInt:[textField.text intValue]];
于 2009-01-05T16:13:50.723 回答
-5

嘿伙计们,您对此有何看法,这似乎完全满足了我的目的。目前只有英国,所以当我有机会时会担心本地化。

我用它来存储号码

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 而不是我上面的解决方法。

于 2009-01-05T17:11:55.413 回答