2012-02-14 2 views
0

저는 전 세계에서 사용할 통화 제거 기능을 구축해 왔습니다. 그러나 버그가 밝혀지면서 이유가 확실하지 않습니다. 내가 1,000.00에 전달하면Obj-C, 통화 가치를 유효한 숫자로 발행하십시오.

+(double)removeFormatPrice:(NSString *)strPrice { 

    NSNumberFormatter *currencyFormatter = [[[NSNumberFormatter alloc] init] 
     autorelease]; 
    [currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle]; 
    NSNumber* number = [currencyFormatter numberFromString:strPrice]; 

    NSNumberFormatter *formatter = [[[NSNumberFormatter alloc] init] 
     autorelease]; 
    NSMutableString *mstring = [NSMutableString stringWithString:strPrice]; 
    NSRange wholeShebang = NSMakeRange(0, [mstring length]); 

    [mstring replaceOccurrencesOfString: [formatter decimalSeparator] 
          withString: @"." 
           options: 0 
            range: wholeShebang]; 

    double newPrice = [mstring doubleValue]; 
    if (number == nil) { 

     return newPrice; 
    } else { 
     return [number doubleValue]; 
    } 
} 

는 그것이 것을 단지를해야 할 점 (기간/마침표)를 대체 할뿐만 아니라, 쉼표를 대체합니다. Newprice이 enter image description here

+0

당신이 얻고 싶은 결과. 1,000.01의 예상 값은 얼마입니까? 500.25? – sch

+0

나는 1,000.00 (영국 숫자 형식)을 통과하고 1000.00 또는 1000을 얻는다. 순간에 나는 1을 얻는다. – Jules

답변

1

사용 ... Heres는 1. 내 전체 디버그로 나오는이

[mstring replaceOccurrencesOfString: [formatter groupingSeparator] 
          withString: @"" 
           options: 0 
            range: wholeShebang]; 
0

무엇 일어나고있는 것은, -[NSString doubleValue] 쉼표에서 중지, 문자열 "1,00000"을 구문 분석하는 데 실패하고 "1"을 반환합니다. 대신 필요에 따라 number의 형식을 지정해야합니다. 적절한 형식으로 formatter을 구성하고이를 사용하여 최종 문자열을 가져옵니다. 프레임 워크에 의존 할 수있는 경우 수동으로 문자를 대체하지 마십시오.

편집 : 전체 코드 예제

NSNumberFormatter *currencyFormatter = [[[NSNumberFormatter alloc] init] autorelease]; 
[currencyFormatter setNumberStyle: NSNumberFormatterCurrencyStyle]; 
NSNumber* number = [currencyFormatter numberFromString:strPrice]; 

NSNumberFormatter *formatter = [[[NSNumberFormatter alloc] init] autorelease]; 
[formatter setPositiveFormat: @"#.00"]; 
NSLog(@"%@ %@", number, [formatter stringFromNumber: number]); 

내 컴퓨터에 현재 로케일과 내가 얻을 : 정말 마지막 무엇을 볼 수 없습니다

1000 1000,00