web-dev-qa-db-ja.com

Objective-Cで文字列変換を行う方法は?

文字列をdoubleに変換し、計算を行った後、文字列に戻します。

Objective-Cでこれを行うにはどうすればよいですか?

Doubleを最も近い整数に丸める方法はありますか?

144
rksprst

NSStringをdoubleに変換するには

double myDouble = [myString doubleValue];

その後、次のように最も近い整数に丸めることができます

int myInt = (int)(myDouble + (myDouble>0 ? 0.5 : -0.5))

私は文字列に戻すより合理化された方法があるかどうか正直にわかりません

NSString* myNewString = [NSString stringWithFormat:@"%d", myInt];
228
olliej

実際に文字列から数値に適切に変換するには、文字列の読み取り元のロケールに設定された NSNumberFormatter のインスタンスを使用する必要があります。

ロケールが異なると、数値の形式も異なります。たとえば、世界の一部の地域では、COMMAが小数点記号として使用され、他の地域ではPERIOD —_であり、千単位の区切り記号(使用される場合)は逆になります。スペースの場合を除きます。またはまったく存在しません。

それは、入力の出所に本当に依存します。最も安全な方法は、入力のフォーマット方法にNSNumberFormatterを設定し、-[NSFormatter numberFromString:]を使用してNSNumberを取得することです。変換エラーを処理する場合は、代わりに-[NSFormatter getObjectValue:forString:range:error:]を使用できます。

70
Chris Hanson

Olliejの答えに加えて、intからNSNumberstringValueを使用して文字列に戻すことができます。

[[NSNumber numberWithInt:myInt] stringValue]

stringValueNSNumberdescriptionWithLocale:nilを呼び出し、ローカライズされた値の文字列表現を提供します。 [NSString stringWithFormat:@"%d",myInt]myIntの適切にローカライズされた表現を提供するかどうかはわかりません。

32
Barry Wark

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
7
miker

olliejの 四捨五入 メソッドは負の数に対して間違っています

  • 2.4 roundedは2です(olliejのメソッドはこれを正しくします)
  • −2.4 roundedは−2(olliejのメソッドは-1を返します)

これが代替案です

  int myInt = (int)(myDouble + (myDouble>0 ? 0.5 : -0.5))

もちろん、math.hの丸め関数を使用できます。

7
Paul Dixon
// 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];
3
Samir Jwarchan

数値から文字列への変換の場合、新しいリテラル構文(XCode> = 4.4)を使用すると、少しコンパクトになります。

int myInt = (int)round( [@"1.6" floatValue] );

NSString* myString = [@(myInt) description];

NSNumber としてボックス化し、 NSObjectsの記述メソッド を使用して文字列に変換します)

2
Robert

丸めには、おそらくmath.hで定義されているC関数を使用する必要があります。

int roundedX = round(x);

Optionを押しながらXcodeのroundをダブルクリックすると、さまざまなタイプを丸めるためのさまざまな機能を備えたmanページが表示されます。

2
benzado

私はこの便利なマクロを使用することになりました:

#define STRING(value)               [@(value) stringValue]
1
dimanitm

この例から、両方の方法でコンバージョンを確認できます。

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);
1
zoltan

テキストフィールドに入力されたテキストを整数に変換します

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];
1
Ashish Pisey

これは私が知っている最も簡単な方法です:

float myFloat = 5.3;
NSInteger myInt = (NSInteger)myFloat;
1
Sam Soffes