在iOS中,每次文本字段中添加三位数字时,为整数插入逗号

在iOS中,每次文本字段中添加三位数字时,为整数插入逗号,ios,objective-c,textfield,nsmutablestring,Ios,Objective C,Textfield,Nsmutablestring,我需要将逗号分隔的数字添加到三个数字中,不带空格,如果总数字小于三,则不添加逗号 例如: 2984 => 2,984 297312984 => 297,312,984 298 => 298 我如何解决这个问题 我试过这个: if([textfield.text length] > 3) { NSMutableString *stringtext = [NSMutableString stringWithString:textfield.text]; [stringt

我需要将逗号分隔的数字添加到三个数字中,不带空格,如果总数字小于三,则不添加逗号

例如:

2984 => 2,984
297312984 => 297,312,984
298 => 298
我如何解决这个问题

我试过这个:

if([textfield.text length] > 3)
{
 NSMutableString *stringtext = [NSMutableString stringWithString:textfield.text];
 [stringtext insertString:@"," atIndex:0];
}
Abt启动后,开始思考是否有更好的解决方案?这是因为会有很多if-else语句

欢迎提出任何建议。

使用NSNumberFormatter

NSNumberFormatter *formatter = [NSNumberFormatter new];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle]; // this line is important!

NSString *formatted = [formatter stringFromNumber:[NSNumber numberWithInteger:2000000]];

[formatter release];

使用NSNumberFormatter

NSNumberFormatter *numberFormatter = [NSNumberFormatter new];
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
NSString *commaString = [numberFormatter stringFromNumber:[NSNumber numberWithInteger:yourIntegerValue]];
NSLog(@"---> %@",commaString);
或者通过字符串操作

NSMutableString*mutString=[nsmutablestringwithstring:@“123456789”];
NSMUTABLEARRY*数组=[NSMUTABLEARRY new];

对于(NSInteger i=1;i这就是我想到的:只需设置文本字段的委托,并相应地实现以下方法:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    if (textField.text.length % 4 == 3) {
        if (string.length != 0) {
            textField.text = [NSString stringWithFormat:@"%@,%@", textField.text, string];
            return NO;
        }
    }

    return YES;
}

请尝试以下功能

    //------------------------------------------------------------------------
    // Method : ChangeNumberIntoCommaSeparatedStringDec
    // Method to convert number into comma separated string
    //------------------------------------------------------------------------
    -(NSString *)ChangeNumberIntoCommaSeparatedStringDec:(double)num
    {

            NSNumber *number = [NSNumber numberWithDouble:num];
            NSNumberFormatter *frmtr = [[NSNumberFormatter alloc] init];
           //here locale as applied to do not change the formatter values after changing the device locale
            [frmtr setLocale:[[NSLocale alloc]initWithLocaleIdentifier:@"en_US"]];
            [frmtr setGroupingSize:3];
            [frmtr setGroupingSeparator:@","];
            [frmtr setUsesGroupingSeparator:YES];
            [frmtr setMaximumFractionDigits:2];
            [frmtr setMinimumFractionDigits:2];
            NSString *str=[frmtr stringFromNumber:number];
            [frmtr release];
            return(str);        
    }

对不起,但是文本字段中的文本不是实时更新的要求吗?我不知道,即使在问题中也没有提到。对,我只是从目标对象推断出一个文本字段…随便;)@AnoopVaidya谢谢,这是我的想法。这就是你和我之间的区别,如果我假设并解决,我至少得到3张反对票。哈哈。但对你来说永远是+5D@AnoopVaidya(你应该看到我在一些C++问题上被大量否决了)“Lakh谢谢:你会很快到达这里的:)Viely:我所有的时间DoWordPosits都显示了26,我想20的问题是。您可能应该重新表述您的问题,并要求即时更新textfield中的输入,以便为您插入数千个组分隔符。因此,NSNumberFormatter是一个不错的选择。
    //------------------------------------------------------------------------
    // Method : ChangeNumberIntoCommaSeparatedStringDec
    // Method to convert number into comma separated string
    //------------------------------------------------------------------------
    -(NSString *)ChangeNumberIntoCommaSeparatedStringDec:(double)num
    {

            NSNumber *number = [NSNumber numberWithDouble:num];
            NSNumberFormatter *frmtr = [[NSNumberFormatter alloc] init];
           //here locale as applied to do not change the formatter values after changing the device locale
            [frmtr setLocale:[[NSLocale alloc]initWithLocaleIdentifier:@"en_US"]];
            [frmtr setGroupingSize:3];
            [frmtr setGroupingSeparator:@","];
            [frmtr setUsesGroupingSeparator:YES];
            [frmtr setMaximumFractionDigits:2];
            [frmtr setMinimumFractionDigits:2];
            NSString *str=[frmtr stringFromNumber:number];
            [frmtr release];
            return(str);        
    }