2014-01-31 15 views
0

플로트를 나타내는 문자열이 있습니다 (예 : 2400.0). 숫자 (2,400.0)로 서식을 지정하고 숫자 기호 뒤에 0을 유지해야합니다.NSNumberFormatter : 25.0과 같은 문자열에서 시작하는 마지막 숫자로 0 표시

NSString* theString = @"2400.0"; 

// I convert the string to a float 
float f = [theString floatValue]; 
// here I lose the digit information :(and it ends up with 2400 instead of 2400.0 

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
[formatter setNumberStyle:NSNumberFormatterDecimalStyle]; 
[formatter setUsesSignificantDigits:YES]; 
[formatter setMinimumFractionDigits:1]; 
[formatter setMaximumFractionDigits:2]; 
[formatter setLocale:[NSLocale currentLocale]]; 

NSString *result = [formatter stringFromNumber:@(f)]; 

의 I 내가 올바른 문자열을 얻을 수있는 방법 2,400.0

필요 동안 resultNSLog2,400입니까?

답변

3

아마도 minimumFractionDigits을 1 (이 경우 maximumFractionDigits)로 설정하고 싶을 것입니다.

유효 숫자를 사용하지 않을 수도 있습니다. 다음 코드는 원하는 결과를 산출한다 :이

NSString *theString = @"2400.0"; 

float f = [theString floatValue]; 

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
[formatter setNumberStyle:NSNumberFormatterDecimalStyle]; 
[formatter setMinimumFractionDigits:1]; 
[formatter setMaximumFractionDigits:1]; 
[formatter setLocale:[NSLocale currentLocale]]; 

NSLog(@"%@", [formatter stringFromNumber:@(f)]); 
+0

문제는 문자열에서 첫 번째 변환하는 동안 나는 "0.0"정보가 손실 떠 있다는 것입니다. 이미'minimumFractionDigits'를 설정하려했습니다. Btw 좀 더 정확하게 내 코드 예제에 추가합니다. – MatterGoal

+0

어떻게'.0' (내가 이해할 수있는 다른 부분이긴하지만'.0'?)을 잃을 수 있는지 이해할 수 없습니다. 어쨌든 입력 용과 출력 용으로 두 개의 숫자 포맷터가 필요합니다. – DarkDust

+0

아, 그리고'setUsesSignificantDigits : YES'를 설정 했으므로 ['minimumSignificantDigits'] (https://developer.apple.com/library/mac/documentation/cocoa/reference/Foundation/Classes/NSNumberFormatter_Class/)를 설정할 수 있습니다. Reference/Reference.html # // apple_ref/occ/instm/NSNumberFormatter/setMinimumSignificantDigits :) ([이 질문 (http://stackoverflow.com/questions/1322348/what-describes-nsnumberformatter-maximumsignificantdigits) 참조) 또는 그 (것)들을 끄십시오. – DarkDust

0

테 아래 소수점 이하의 0의 개수는 포맷에 사용되는 문제

NSString *formatString = @"0,000.0"; 
[formatter setPositiveFormat:formatString]; 

를 해결한다. 음수에서도 작동합니다.

소수점 앞뒤의 부동 소수 자릿수에 따라 형식 문자열을 동적으로 변경해야합니다.

희망이 있습니다.

+1

로캘 정보를 유지해야합니다. 이것은 해결책이 아닙니다. 많은 국가에서 '@ "0.000,0"' – MatterGoal

+0

동의어와 같은 다른 형식을 사용합니다. 일반적인 해결책은 아닙니다. 그러나 로케일을 포맷터로 설정해야하는 일반 솔루션의 경우 "0,000.0의 형식이 필요합니다"라는 질문에 대한 답변을 제공합니다. –

0

쉽게

는 당신이 그것을 표시 한 바로 다음을 수행

myLabel.text = @"%0.1f", f;