【问题标题】:NSNumberFormatter change decimal separator styleNSNumberFormatter 更改小数分隔符样式
【发布时间】:2012-10-29 10:14:21
【问题描述】:
- (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;
    }

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

谢谢

【问题讨论】:

  • [NSNumberFormatter setFormat] 不是你想要的吗?

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


【解决方案1】:

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

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

另请注意,有一种特殊的语言环境 [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"] 定义了一个特殊的语言环境,该语言环境不能由用户设置更改,并且始终相同。

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

【讨论】:

    猜你喜欢
    • 2013-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-06
    • 2014-02-18
    相关资源
    最近更新 更多