私のコードは次のようになります
NSNumber *inputToNumber = [NSNumber numberWithFloat:[textField.text floatValue]];
テキストフィールドの値は実際には電話番号です。迷惑な(2.0)78966e+08としてNSNumberに保存されます
NSNumberを取得して0207896608として保存するにはどうすればよいですか?
私のコードは次のようになります
NSNumber *inputToNumber = [NSNumber numberWithFloat:[textField.text floatValue]];
テキストフィールドの値は実際には電話番号です。迷惑な(2.0)78966e+08としてNSNumberに保存されます
NSNumberを取得して0207896608として保存するにはどうすればよいですか?
電話番号をNSNumberに保存するという基本的な考え方には欠陥があると思います。
NSNumberの代わりにNSStringを使用します。
数字と呼ばれているからといって、「電話番号」が「5」や「pi」と同じ意味の数字であるとは限りません。
電話番号を文字列として扱うか、それぞれを表す TelephoneNumber モデル クラスを作成する必要があります。
数字に先行0がなく、先行0のある数字が先行0のない同じ数字と同じではない場所が世界にあると考えてください。
05843924 != 5843924
だから、そのハッキングに怠惰になるのをやめてNSNumber
、あなた自身の電話番号クラスを構築してください。
科学表記法は、非常に大きな (または非常に小さな) 数値の既定の出力として、多くのコンピューター言語で使用されています。数値を 10 進数として出力する場合は、出力形式を指定する必要があります (実装は言語によって異なります)。
また、julesjacobs は正しいです。電話番号には 2 進数の丸め誤差が発生する可能性があるため、FLOAT を使用しないでください。INT または STRING を使用すると、頭痛の種が大幅に軽減されます。
数値として扱う必要がある場合は、それをその部分に分割し、各部分を整数として格納する必要があります。
01112223333
country code 0
area code 111
prefix 222
number 3333
または、操作する必要がない場合は、すべてを文字列として保存できます。
電話番号を float に格納していますか? 整数または文字列の使用を検討する必要があります。多分:
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 を提案した人として回答をマークします。