NSNumberFormatter更改小数分隔符样式

时间:2012-10-29 10:14:22

标签: objective-c nsnumber number-formatting nsnumberformatter uitextfielddelegate

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];

    if (string.length == 0) {
        return YES;
    }

    [numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
    NSNumber* candidateNumber;
    NSString* candidateString = [textField.text stringByReplacingCharactersInRange:range withString:string];
    range = NSMakeRange(0, [candidateString length]);
    [numberFormatter getObjectValue:&candidateNumber forString:candidateString range:&range error:nil];
    if (([candidateString length] > 0) && (candidateNumber == nil || range.length < [candidateString length])) {
        return NO;
    }
    else
    {
        return YES;
    }

嗨,使用此代码,我只能在文本字段中插入十进制值。 小数点分隔符是逗号“,” 如何将其更改为点“。” ?

由于

1 个答案:

答案 0 :(得分:4)

有一个名为Localization的小东西。每种语言都使用不同的字符作为小数分隔符。其中英语使用小数点,其他语言使用逗号(或其他字符)。

创建NSNumberFormatter时,它使用系统区域设置(NSLocale实例)来决定小数分隔符(以及分组分隔符和其他内容)。 如果您想要一个固定的行为,那么只需使用[NSNumberFormatter setLocale:]

设置不同的区域设置

另请注意,有一种特殊的语言环境 [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"],它定义了一个特殊的区域设置,无法通过用户设置进行更改,并始终相同。

在这种情况下,使用NSNumberFormatter不是最好的主意。这是您想要使用正则表达式的情况之一。