2013-07-23 2 views
0

다음 NSNumberFormatter를 사용하여 쉼표와 기호를 통화 값에 추가하고 있습니다.iOS : NSNumberFormatter가 문자열을 NSNumber로 다시 변환하지 않습니다.

self.currencyFormatter = [NSNumberFormatter new]; 
self.currencyFormatter.numberStyle = NSNumberFormatterCurrencyStyle; 
self.currencyFormatter.currencySymbol = @"£"; 
self.currencyFormatter.currencyCode = @"GBP"; 
self.currencyFormatter.roundingMode = NSNumberFormatterRoundHalfUp; 
self.currencyFormatter.maximumFractionDigits = 0; 

사용은 예상대로

self.principleAmountTextField.text = [self.currencyFormatter stringFromNumber:[NSNumber numberWithInteger:100000]]; 

이 £ 100,000 표시합니다. 이제 두 개의 자릿수 (텍스트는 £ 100,00096이됩니다)를 텍스트 필드에 삽입하고 문자열을 정수로 변환하려고하면 0이됩니다. 기본적으로 다음 행은 0을 반환합니다.이 문제를 어떻게 다룰 지 모르겠습니다.

NSLog(@"%d", [[self.currencyFormatter numberFromString:@"£100,00096"] integerValue]); 

참고 저는 텍스트 입력란에 숫자를 입력 할 수있는 맞춤 입력보기가 있습니다. In 편집 끝 짝수 형식 번호와 쉼표로 표시하십시오.

+0

'£ 100,00096'은 유효한 숫자가 아닙니다. '£ 10,000,096'은'£ 10000096'이 될 것입니다. – rmaddy

+0

....하지만 사용자가 숫자를 입력하면 쉼표를 넣을 수 없습니다! 입력 된 필수 형식으로 자동 변환되는 번호가 있습니까? – applefreak

+0

사용자가 잘못된 값을 입력 할 수있는 경우 변환하기 전에 문자열에서 그룹화 문자를 제거해야합니다. – rmaddy

답변

1

당신은이 작업을 수행하려면 쉼표를 제거해야합니다, 당신은 여전히 ​​당신의 텍스트 필드에이를 표시 할 수 있지만 포맷터에 문자열을 전달하기 전에 그들을 제거해야한다. 다음과 같은 내용 :

NSString *userInput = @"£100,00096";  
userInput = [userInput stringByReplacingOccurrencesOfString:@"," withString:@""]; 
NSLog(@"%ld", (long)[[currencyFormatter numberFromString:userInput] integerValue]); 
+1

코드에 쉼표를 하드 코딩하지 마십시오. 사용자의 로켈에 따라 다른 문자를 사용할 수 있습니다. 숫자 포맷터에서 그룹화 문자를 얻는 것이 좋습니다. – rmaddy

+0

좋은 점 rmaddy! 내가 고칠거야. – Lance

0

100,00096은 ... 올바르지 않습니다

는 이들 중 하나 의미합니까?

[[self.currencyFormatter numberFromString:@"£10000096"] integerValue] 
[[self.currencyFormatter numberFromString:@"£100,000.96"] integerValue] 
[[self.currencyFormatter numberFromString:@"£100000.96"] integerValue] 
[[self.currencyFormatter numberFromString:@"£10,000,096"] integerValue] 
+0

... 사용자가 방금 추가하는 번호를 입력하면 아니요. 예를 들어, 텍스트 필드에 이미 £ 100,000가 있습니다. 이제 그들은 번호를 입력하기 시작하고 입력 된 모든 £ 100,000 +로 추가됩니다. 그들은 쉼표가 아닌 숫자 만 입력 할 수 있습니다. didEditEnd에서 번호 서식을 지정하고 있습니다. – applefreak

+1

물론, 숫자를 입력하는 동안 사용자에게 표시 할 내용을 다시 포맷해야합니다. '100,00096 '은 숫자를 표시하는 올바른 방법이 아닙니다. – runmad

0

최종 참조 코드입니다. 통화 기호가있는 번호도 유효하지 않습니다! 다음은 모든 것을 처리합니다.

NSCharacterSet *doNotWant = [NSCharacterSet characterSetWithCharactersInString:[NSString stringWithFormat:@"%@%@", self.currencyFormatter.groupingSeparator, self.currencyFormatter.currencySymbol]]; 
    self.amountTextField.text = [[self.amountTextField.text componentsSeparatedByCharactersInSet:doNotWant] componentsJoinedByString:@""]; 
    self.amountTextField.text = [NSString stringWithFormat:@"£%@", self.amountTextField.text]; 
    NSUInteger amount = [[self.currencyFormatter numberFromString:self.amountTextField.text] integerValue]; 
    self.amountTextField.text = [self.currencyFormatter stringFromNumber:[NSNumber numberWithInteger:amount]] 
관련 문제