2013-04-14 4 views
0

나는 다음과 같은 값을 가질 :NSNumberFormatter를 사용하여 번호를 수정하는 방법은 무엇입니까?

5.1M (5100000) 
80M (80000000) 
300.5M (300500000) 

5K (5000) 
2000K (2000000) 
200.5K (200500) 

(전로를 설정해야합니다 값은 숫자 뒤에 괄호 안에 있습니다).

기본적으로 숫자는 소수점 또는 소수점이 없으며 K (천 단위) 또는 M (백만 단위)로 끝날 수 있지만 정수일 때만 (즉, 0.5M은 500000이어야 함, 아니오 쉼표).

또한 숫자를 원래 형식으로 다시 변환 할 수 있어야합니다.

어떻게해야하며 어떻게 할 수 있습니까?

+3

를 시도? 이것은 정말로 당신에게 주어진 해결책을 얻을 수있는 장소가 아니며, 스스로 문제를 풀려고 할 때 도움이되는 곳입니다. –

+0

가장 좋은 방법은 [NSNumberFormatter] (https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/DataFormatting/Articles/dfNumberFormatting10_4.html)입니다. 문서는 훌륭한 자료입니다. 진지하게. – sosborn

+0

NSNumberFormatter에 대해 알고 있습니다. 어디서부터 시작해야할지 모르겠습니다. 나는 Apple의 설명서를 통해 읽었지만 실제로 일하거나 많은 것을 얻을 수는 없습니다. – user1234

답변

0

그래서 숫자로 시작하고 K 또는 M으로 끝나는 NSString이 있다고 말하는 것입니까? 그리고 그것이 무엇으로 구성되어 있는지보고 싶고 그것을 실제 숫자 값으로 변환하고 싶습니까? 이것은 NSScanner의 일입니다.

NSScanner는 Objective-C에서 정규 표현식을 사용할 수있게되기 훨씬 전에 사용되었습니다. 요즘에는 NSRegularExpression을 사용할 수도 있습니다. 당신이 그것을 정말는 K 또는 M 뒤에 숫자 인 것은 사실에 대한 을 알고있는 경우

또는, 당신도 그렇게 할 필요가 없습니다. 끝에서 마지막 캐릭터를 잡아 당깁니다. 그것은 K 또는 M이고 당신은 그것이 어느 것인지 알 수 있습니다. 그리고 남은 것은 숫자 문자열이며 숫자로 변환 할 수 있습니다.

의사 코드 (테스트하지) : 당신은 무엇을

NSString* s = @"5.1M"; 
NSUInteger len = s.length; 
NSString* numPart = [s substringToIndex: len-2]; 
NSString* unitPart = [s substringFromIndex: len-1]; 
int multiplier = 1000; 
if ([unitPart isEqualToString: @"M"]) 
    multiplier = 1000000; 
float result = numPart.floatValue * multiplier; 
+0

고마워요. 나는 이미 그것을 알아 냈다. 항상 K 또는 M이 뒤따를 수는 없으므로 K 또는 M으로 끝나는 지 먼저 확인합니다. – user1234

0

내가 다시 작성한 SQSMetricFormatter (https://github.com/shultzc/SQSMetricFormatter)라는 사용자 지정 NSNumberFormatter는 메트릭 접두사를 사용하여 숫자 형식을 지정합니다.

당신이 필요로하는 것을 할 수도 있고, 아니면 적어도 자신의 솔루션을 구현하기 위해 점프 오프 포인트를 제공 할 수도 있습니다.