NSNumber存储浮点数。请不要科学记谱法?

时间:2009-01-05 15:52:18

标签: ios objective-c cocoa-touch string-formatting phone-number

我的代码看起来像这样

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

textfield中的值实际上是一个电话号码。它作为恼人的(2.0)78966e + 08

存储在NSNumber中

如何让NSNumber将其存储为0207896608?

7 个答案:

答案 0 :(得分:34)

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

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

我会用NSString代替NSNumber。

答案 1 :(得分:9)

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

要么将电话号码视为字符串,要么创建一个TelephoneNumber模型类来代表每个电话号码。

答案 2 :(得分:5)

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

05843924 != 5843924

所以停止对NSNumber黑客进行懒惰并建立自己的电话号码类。

答案 3 :(得分:2)

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

此外,julesjacobs是正确的。您不应将FLOAT用于电话号码,因为它会受到二进制舍入错误的影响。使用INT或STRING可以避免很多麻烦。

答案 4 :(得分:-1)

如果你需要能够以数字的形式处理它,你应该把它分解成它的部分,并将每个部分存储为整数。

01112223333
country code 0
area code 111
prefix 222
number 3333

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

答案 5 :(得分:-3)

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

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

答案 6 :(得分:-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而不是我的上述解决方法。