简体   繁体   English

NSNumberFormatter与NSNumberFormatterPercentStyle的怪异

[英]NSNumberFormatter weirdness with NSNumberFormatterPercentStyle

I need to parse some text in a UITextField and turn it into a percentage. 我需要解析UITextField中的一些文本并将其转换为百分比。 Ideally, I'd like the user to either type something like 12 or 12% into the text field and have that be parsed into a number as a percentage. 理想情况下,我希望用户在文本字段中输入12%或12%之类的值,然后将其解析为百分比形式的数字。

Here's what's weird. 这很奇怪。 The number formatter seems to not like 12 and seems to divide 12% by 10000 instead of 100: 数字格式器似乎不喜欢12,并且似乎将12%除以10000而不是100:

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

How do I get the formatter to return 0.12 as expected? 如何使格式化程序按预期返回0.12?

EDIT: it seems to only happen if the formatter fails first. 编辑:它似乎仅在格式化程序首先失败的情况下发生。 If the formatter does not fail it returns 0.12 as expected. 如果格式化程序未失败,则按预期返回0.12。 Strange. 奇怪。

Here's a workaround that seemed to work for me: 这是一个似乎对我有用的解决方法:

I subclassed NSNumberFormatter and implemented the following methods. 我将NSNumberFormatter子类化,并实现了以下方法。 Seemed to work for me. 似乎为我工作。

- (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);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM