2010-04-04 16 views
1

我需要解析UITextField中的一些文本,并将其变成百分比。理想情况下,我希望用户在文本字段中输入类似12或12%的东西,并将其作为百分比解析为数字。NSNumberFormatter怪异与NSNumberFormatterPercentStyle

这是什么奇怪。数字格式似乎不喜欢12,似乎通过10000,而不是100分的12%:

NSNumberFormatter *formatter = [[[NSNumberFormatter alloc] init] autorelease]; 
[formatter setNumberStyle:NSNumberFormatterPercentStyle]; 

NSNumber *n1 = [formatter numberFromString:@"12"]; 
NSNumber *n2 = [formatter numberFromString:@"12%"]; 

NSLog(@"n1 = %@", n1); // n1 = (null) 
NSLog(@"n2 = %@", n2); // n2 = 0.0012 

我如何格式化返回0.12预期?

编辑:它似乎只发生如果格式化程序首先失败。如果格式化程序没有失败,则按预期返回0.12。奇怪。

回答

3
+0

谢谢。哇,几乎两年前找到了。有点令人惊讶的是,像这样的错误还没有得到修复,因为它会严重影响金融系统。 – rein 2010-04-04 13:40:45

+0

@rein:我认为这个问题是因为这个错误发生在Apple,但ICU。 NSNumberFormatter只是ICU UNumberFormat的前端。 (当然,我们可以责怪苹果使用ICU的古老版本(4.0)。) – kennytm 2010-04-04 13:43:45

+0

感谢您的澄清。我已经解决了这个问题。 – rein 2010-04-04 13:57:20

0

下面是似乎为我工作的一种变通方法:

我子类NSNumberFormatter并实施以下方法。似乎为我工作。

- (NSNumber *)numberFromString:(NSString *)string { 
    NSNumber *retValue = [super numberFromString:string]; 
    if ([self numberStyle] == NSNumberFormatterPercentStyle) { 
     [super setNumberStyle:NSNumberFormatterPercentStyle]; 
    } 
    return (retValue); 
} 

- (NSString *)stringFromNumber:(NSNumber *)number { 
    NSString * str = [super stringFromNumber:number]; 
    if ([self numberStyle] == NSNumberFormatterPercentStyle) { 
     [super setNumberStyle:NSNumberFormatterPercentStyle]; 
    } 
    return (str); 
}