【问题标题】:NSNumberFormatter thousand seperatorNSNumberFormatter 千位分隔符
【发布时间】:2016-11-09 08:48:40
【问题描述】:

我想创建千位分隔符。当我在文本字段中输入数字时它可以工作。但是,当我从文本字段中删除一个数字时,我不工作。

我输入时的屏幕截图:

.

我从文本字段中删除数字时的屏幕截图:

但我想有这样的号码: 121.132 ,你能帮我解决这个问题吗?

代码:

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init] ;
[formatter setGroupingSeparator:@"."];
[formatter setGroupingSize:2];
[formatter setUsesGroupingSeparator:YES];
[formatter setSecondaryGroupingSize:3];

NSString *num = textField.text ;
if(![num isEqualToString:@""]){
    num= [num stringByReplacingOccurrencesOfString:@"." withString:@""];
    NSString *str = [formatter stringFromNumber:[NSNumber numberWithDouble:[num doubleValue]]];
    textField.text=str;
 }

【问题讨论】:

  • 这段代码放在哪里?你为什么要删除你自己的时期?
  • 它在 shouldChangeCharactersInRange 里面,用户想修改它以写出正确的文本,这就是为什么,它应该在用户删除文本时起作用
  • 你说的是-textField:shouldChangeCharactersInRange:replacementString:?您的代码是否在删除时执行?
  • 是的,它会删除,但会将点放在错误的位置
  • ?请在设置之前登录textField.textstr

标签: ios objective-c xcode nsnumber nsnumberformatter


【解决方案1】:

尝试以下任一解决方案:-

解决方案 1

 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSNumberFormatter *nf = [[NSNumberFormatter alloc] init] ;
    [nf setGroupingSize:3];
    [nf setCurrencyGroupingSeparator:@"."];
    [nf setUsesGroupingSeparator:YES];
    // you should create a string from number
    NSNumber *n = [NSNumber numberWithLong: 100000000];
    NSString *str = [nf stringFromNumber: n];
    textField.text = str;
    NSLog(@"My number: %@", str);
    return true;
}

解决方案 2

    - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
    {
           NSString *strTest = [NSString stringWithFormat:@"%@,%@",textField.text,string];
            NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init] ;
            [formatter setGroupingSeparator:@"."];
            [formatter setGroupingSize:2];
            [formatter setUsesGroupingSeparator:YES];
            [formatter setSecondaryGroupingSize:3];
            NSString *num = strTest ;
            if(![num isEqualToString:@""])
            {
                num= [num stringByReplacingOccurrencesOfString:@"." withString:@""];
                NSString *str = [formatter stringFromNumber:[NSNumber numberWithDouble:[num doubleValue]]];

                _textField.text=str;

            }

        return true;
    }

【讨论】:

  • 也一样,打字的时候可以用,删除的时候就不行了。
  • -textField 内部:shouldChangeCharactersInRange:replacementString: