文字列をdoubleに変換し、計算を行った後、文字列に戻します。
Objective-Cでこれを行うにはどうすればよいですか?
Doubleを最も近い整数に丸める方法はありますか?
NSStringをdoubleに変換するには
double myDouble = [myString doubleValue];
その後、次のように最も近い整数に丸めることができます
int myInt = (int)(myDouble + (myDouble>0 ? 0.5 : -0.5))
私は文字列に戻すより合理化された方法があるかどうか正直にわかりません
NSString* myNewString = [NSString stringWithFormat:@"%d", myInt];
実際に文字列から数値に適切に変換するには、文字列の読み取り元のロケールに設定された NSNumberFormatter
のインスタンスを使用する必要があります。
ロケールが異なると、数値の形式も異なります。たとえば、世界の一部の地域では、COMMA
が小数点記号として使用され、他の地域ではPERIOD
—_であり、千単位の区切り記号(使用される場合)は逆になります。スペースの場合を除きます。またはまったく存在しません。
それは、入力の出所に本当に依存します。最も安全な方法は、入力のフォーマット方法にNSNumberFormatter
を設定し、-[NSFormatter numberFromString:]
を使用してNSNumber
を取得することです。変換エラーを処理する場合は、代わりに-[NSFormatter getObjectValue:forString:range:error:]
を使用できます。
Olliejの答えに加えて、intからNSNumber
のstringValue
を使用して文字列に戻すことができます。
[[NSNumber numberWithInt:myInt] stringValue]
stringValue
のNSNumber
はdescriptionWithLocale:nil
を呼び出し、ローカライズされた値の文字列表現を提供します。 [NSString stringWithFormat:@"%d",myInt]
がmyInt
の適切にローカライズされた表現を提供するかどうかはわかりません。
NSNumberFormatterのローカライズされた数値文字列(xCode 3.2.4、osX 10.6)の読み取り用のサンプルを次に示します。注意:「8,765.4」などの末尾の空白は処理できますが、先頭の空白は処理できず、浮遊テキスト文字は処理できません。 (不正な入力文字列: "8"および "8q"および "8 q"。)
NSString *tempStr = @"8,765.4";
// localization allows other thousands separators, also.
NSNumberFormatter * myNumFormatter = [[NSNumberFormatter alloc] init];
[myNumFormatter setLocale:[NSLocale currentLocale]]; // happen by default?
[myNumFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4];
// next line is very important!
[myNumFormatter setNumberStyle:NSNumberFormatterDecimalStyle]; // crucial
NSNumber *tempNum = [myNumFormatter numberFromString:tempStr];
NSLog(@"string '%@' gives NSNumber '%@' with intValue '%i'",
tempStr, tempNum, [tempNum intValue]);
[myNumFormatter release]; // good citizen
olliejの 四捨五入 メソッドは負の数に対して間違っています
これが代替案です
int myInt = (int)(myDouble + (myDouble>0 ? 0.5 : -0.5))
もちろん、math.hの丸め関数を使用できます。
// Converting String in to Double
double doubleValue = [yourString doubleValue];
// Converting Double in to String
NSString *yourString = [NSString stringWithFormat:@"%.20f", doubleValue];
// .20f takes the value up to 20 position after decimal
// Converting double to int
int intValue = (int) doubleValue;
or
int intValue = [yourString intValue];
数値から文字列への変換の場合、新しいリテラル構文(XCode> = 4.4)を使用すると、少しコンパクトになります。
int myInt = (int)round( [@"1.6" floatValue] );
NSString* myString = [@(myInt) description];
( NSNumber としてボックス化し、 NSObjectsの記述メソッド を使用して文字列に変換します)
丸めには、おそらくmath.hで定義されているC関数を使用する必要があります。
int roundedX = round(x);
Optionを押しながらXcodeのround
をダブルクリックすると、さまざまなタイプを丸めるためのさまざまな機能を備えたmanページが表示されます。
私はこの便利なマクロを使用することになりました:
#define STRING(value) [@(value) stringValue]
この例から、両方の方法でコンバージョンを確認できます。
NSString *str=@"5678901234567890";
long long verylong;
NSRange range;
range.length = 15;
range.location = 0;
[[NSScanner scannerWithString:[str substringWithRange:range]] scanLongLong:&verylong];
NSLog(@"long long value %lld",verylong);
テキストフィールドに入力されたテキストを整数に変換します
double mydouble=[_myTextfield.text doubleValue];
最も近いdoubleへの丸め
mydouble=(round(mydouble));
最も近い整数への丸め(正の値のみを考慮)
int myint=(int)(mydouble);
doubleから文字列への変換
myLabel.text=[NSString stringWithFormat:@"%f",mydouble];
または
NSString *mystring=[NSString stringWithFormat:@"%f",mydouble];
intから文字列への変換
myLabel.text=[NSString stringWithFormat:@"%d",myint];
または
NSString *mystring=[NSString stringWithFormat:@"%f",mydouble];
これは私が知っている最も簡単な方法です:
float myFloat = 5.3;
NSInteger myInt = (NSInteger)myFloat;