NSNumber格納フロート。科学表記法はありませんか?
-
03-07-2019 - |
質問
私のコードは次のようになります
NSNumber *inputToNumber = [NSNumber numberWithFloat:[textField.text floatValue]];
テキストフィールドの値は、実際には電話番号です。 NSNumberに迷惑な(2.0)78966e + 08として保存されています
NSNumberを取得して0207896608として保存するにはどうすればよいですか?
解決
科学表記法は、非常に大きな(または非常に小さな)数字のデフォルト出力として、多くのコンピューター言語で使用されます。数値を10進数として出力する場合は、出力形式を指定する必要があります(実装は言語によって異なります)。
また、julesjacobsは正しいです。 FLOATは電話番号に使用しないでください。FLOATはバイナリ丸めエラーの影響を受けるためです。 INTまたはSTRINGを使用すると、多くの頭痛の種が軽減されます。
他のヒント
NSNumberに電話番号を保存する基本的な考え方に欠陥があると思います:
- 先頭の0の有無にかかわらず、数字をどのように区別しますか?
- 外国の電話番号はどのように保存しますか?
NSNumberの代わりにNSStringを使用します。
数字と呼ばれるからといって、「電話番号」を意味するわけではありません。は、「5」と同じ意味の数字です。または" pi"
電話番号を文字列として扱うか、各電話番号を表す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]];
Hey Guys、これについてどう思いますか、私の目的を完全に満たしているようです。現時点では英国だけなので、機会があればローカライズについて心配します。
これを使用して番号を保存します
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を提案した人として答えをマークします。