1

私のコードは次のようになります

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

テキストフィールドの値は実際には電話番号です。迷惑な(2.0)78966e+08としてNSNumberに保存されます

NSNumberを取得して0207896608として保存するにはどうすればよいですか?

4

7 に答える 7

34

電話番号をNSNumberに保存するという基本的な考え方には欠陥があると思います。

  • 先行ゼロの有無にかかわらず、どのように数字を区別しますか?
  • 海外の電話番号はどのように保存しますか?

NSNumberの代わりにNSStringを使用します。

于 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

科学表記法は、非常に大きな (または非常に小さな) 数値の既定の出力として、多くのコンピューター言語で使用されています。数値を 10 進数として出力する場合は、出力形式を指定する必要があります (実装は言語によって異なります)。

また、julesjacobs は正しいです。電話番号には 2 進数の丸め誤差が発生する可能性があるため、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

電話番号を float に格納していますか? 整数または文字列の使用を検討する必要があります。多分:

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 に答える