2012-02-14 65 views
0

我一直在建立一个在全球范围内运作的货币清算功能。 但是,一个错误已经发现并且不确定原因。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]; 
    } 
} 

如果我通过在1,000.00然后它取代了点(期间/句号),它应该只是做到这一点,但它也取代了逗号。 Newprice出来为1。我的继承人完整的调试...... enter image description here

+0

我实在看不出有什么最后的你想得到的结果。 1,000.01的预期值是多少? 500.25? – sch 2012-02-14 08:54:32

+0

我通过1000.00(英国数字格式),我应该得到1000.00或1000,目前我得到1 – Jules 2012-02-14 09:08:25

回答

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