Objective-C에서 문자열 변환을 수행하는 방법은 무엇입니까?


145

문자열을 이중으로 변환하고 수학을 한 후 문자열로 다시 변환하고 싶습니다.

Objective-C에서 어떻게해야합니까?

double을 가장 가까운 정수로 반올림하는 방법이 있습니까?


크리스 핸슨의 대답 또한, 당신은에서 수 포맷터, 그들의 행동, 그리고 형식 문자열에 대한 자세한 찾을 수 있습니다 맥 OS X 10.4에 대한 NSNumberFormatter 에서 가이드 코코아 프로그래밍 데이터 포맷 .
mmalc

유용한 정보의 또 다른 출처는 NSNumberFormatter에 대한이 기사입니다. iphonesdkarticles.com/2008/11/…
jpm

공식 문서가 꽤 좋다고 생각합니다.

답변:


231

NSString을 사용하여 이중으로 변환 할 수 있습니다

double myDouble = [myString doubleValue];

가장 가까운 정수로 반올림하면 다음과 같이 수행 할 수 있습니다

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

솔직히 문자열로 다시 변환하는보다 효율적인 방법이 있는지 확실하지 않습니다.

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

13
로케일마다 숫자의 형식이 다르기 때문에이 작업을 수행하지 않아도됩니다. 일부는 천에 "1000"을 쓰는 반면, 다른 것은 "1,000"을 쓸 것이고 다른 것은 "1.000"을 쓸 것입니다.-[NSString doubleValue]에서 얻을 수있는 것은 무엇입니까?
Chris Hanson

9
Double은 숫자 데이터 형식이며 서식이 없습니다. [NSString doubleValue]를 호출하면 1000에 불과하므로 1000을 반환합니다.
Andy

12
그리고 NSString은 숫자를 포함 할 수 없으며 숫자의 표현 만 포함 할 수 있습니다. 이 표현은 로케일마다 다른 다양한 형식 중 하나 일 수 있습니다.
Chris Hanson

5
@Barry Wark의 답변을 귀하의 것으로 통합하고 싶을 수도 있습니다.[[NSNumber numberWithInt:myInt] stringValue]
Dan Rosenstark

1
문자열 값이 유효한 이중 문자열이 아닌 경우 doubleValue는 0.0을 반환합니다. 문자열이 유효한 이중 문자열을 나타내지 않으면 nil이 반환되기 때문에 NSNumberFormatter의 사용을 제안하는 솔루션이 더 좋습니다.
Kaydell

70

실제로 문자열에서 숫자로 올바르게 변환하려면 문자열을 NSNumberFormatter읽는 로케일에 대해 구성된 인스턴스를 사용해야 합니다.

로케일마다 숫자의 형식이 다릅니다. 예를 들어, 일부 지역 COMMA에서는 소수 구분 기호로 사용되는 반면 다른 부분에서는 소수 구분 기호로 사용되며 PERIOD천 단위 구분 기호 (사용 된 경우)는 반대로되어 있습니다. 공간 일 때를 제외하고 아니면 전혀 존재하지 않습니다.

실제로 입력의 출처에 따라 다릅니다. 가장 안전한 NSNumberFormatter방법은 입력 형식을 지정하고 입력 -[NSFormatter numberFromString:]을 얻는 데 사용 하는 NSNumber것입니다. 변환 오류를 처리하려면-[NSFormatter getObjectValue:forString:range:error:] 대신 .


2
또는 [NSScanner localizedScannerWithString :]으로 만든 스캐너와 같은 지역화 된 스캐너를 사용하면 [scanner scanDouble : & aDouble]이 사용자의 현재 로캘을 기준으로 이중으로 스캔합니다.
dreamlax

32

olliej의 대답에 추가, 당신의 문자열에있는 int 다시 변환 할 수 NSNumberstringValue:

[[NSNumber numberWithInt:myInt] stringValue]

stringValue에서 NSNumber호출 descriptionWithLocale:nil하여 지역화 된 문자열 값 표현을 제공합니다. 의 [NSString stringWithFormat:@"%d",myInt]현지화 된 적절한 표현을 제공할지 잘 모르겠습니다 myInt.


배리 고마워 게시 한 NSNumber to stringValue 줄은 저에게 효과적이지만 NSString stringWithFormat은 그렇지 않았습니다.
마크

7

olliej의 반올림 방법은 음수에 잘못되었습니다

  • 2.4 반올림은 2입니다 (olliej의 방법이 이것을 올바르게 얻습니다)
  • −2.4 반올림은 −2입니다 (olliej의 메소드는 -1을 리턴 함)

대안이 있습니다.

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

물론 math.h에서 반올림 함수를 사용할 수 있습니다


7

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

1
문자열이 유효한 문자열 이 아닌 경우 numberFromString은 무엇을 반환 합니까?
Ben Clayton

numberFromString : NSNumber 객체를 반환합니다. Apple 문서의 NumberFormattingNSNumberFormatter 를 참조하십시오 . (NSNumber 객체가 "숫자가 아닌"또는 "불량한 숫자"를 어떻게 인코딩하는지 잘 모르겠지만 NSNull 가능한 값이있는 것을 볼 수 있습니다.)
miker

@BenClayton numberFromString은 구문 분석 할 수없는 경우 nil값을 리턴합니다 NSNumber*. 공백과 흩어진 텍스트 문자로 인해 발생하는 문제를 재현 할 수 없습니다. IMO가 제대로 작동합니다. " 28.5 "28.5로 구문 분석하고 "gibberish28.5", "28.5gibberish"그리고 "gibberish28.5gibberish"모두 파싱 할 수 있습니다; " 2 8 . 5. "해석 할 수 없지만 이례적인 것은 아닙니다.
jrh

3
// 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

숫자에서 문자열로 변환하는 경우 새 리터럴 구문 (XCode> = 4.4)을 사용하는 것이 좀 더 컴팩트합니다.

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

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

( NSNumber압축 하여 NSObjects의 description 메소드를 사용하여 문자열로 변환 )


2

반올림의 경우 math.h에 정의 된 C 함수를 사용해야합니다.

int roundedX = round(x);

Option을 누른 상태 round에서 Xcode에서 두 번 클릭 하면 다양한 유형을 반올림하는 다양한 기능이 포함 된 매뉴얼 페이지가 표시됩니다.


1

이것이 내가 아는 가장 쉬운 방법입니다.

float myFloat = 5.3;
NSInteger myInt = (NSInteger)myFloat;

1

이 예제에서 변환을 두 가지 방법으로 볼 수 있습니다.

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

텍스트 필드에 입력 한 텍스트를 정수로 변환

double mydouble=[_myTextfield.text doubleValue];

가장 가까운 더블로 반올림

mydouble=(round(mydouble));

가장 가까운 int로 반올림 (양수 값만 고려)

int myint=(int)(mydouble);

이중에서 문자열로 변환

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

이 편리한 매크로를 사용하여 끝났습니다.

#define STRING(value)               [@(value) stringValue]
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.