【问题标题】:Inserting a comma for integers when there are three digits added everytime to the textfield in iOS当每次向iOS中的文本字段添加三位数字时,为整数插入逗号
【发布时间】:2013-04-05 06:34:07
【问题描述】:

我需要将逗号分隔的数字添加为三位没有空格的数字,如果总位数小于三,则不添加逗号。

例如:

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 是不错的选择。

标签: ios objective-c textfield nsmutablestring


【解决方案1】:

这是我想出的:只需设置文本字段的委托,并相应地实现以下方法:

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

【讨论】:

  • @AnoopVaidya 谢谢,我就是这么想的。
  • 这是你我之间的区别,如果我假设并解决,我至少会得到 3 票反对。哈哈。但对你来说总是+5。 :D
  • @AnoopVaidya(你应该看到我在一些 C++ 问题上被大量否决...)
  • @lakesh 谢谢 :) 你会很快到达这里 :)
  • @Viral:我所有的投票都显示为 26,我认为 20 将用于提问。
【解决方案2】:

使用 NSNumberFormatter

NSNumberFormatter *numberFormatter = [NSNumberFormatter new];
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
NSString *commaString = [numberFormatter stringFromNumber:[NSNumber numberWithInteger:yourIntegerValue]];
NSLog(@"---> %@",commaString);

或者通过字符串操作 <This is not the best way>:

NSMutableString *mutString=[NSMutableString stringWithString:@"123456789"];

NSMutableArray *array=[NSMutableArray new];
for (NSInteger i=1; i<=mutString.length/3; i++) {
    NSInteger index=[mutString length]-i*3;
    [array insertObject:[mutString substringWithRange:NSMakeRange(index, 3)] atIndex:0];
}
if (mutString.length!=mutString.length/3*3) {
    [array insertObject:[mutString substringWithRange:NSMakeRange(0, mutString.length%3)] atIndex:0];
}
NSString *commaString=[array componentsJoinedByString:@","];
NSLog(@"--> %@",commaString);

【讨论】:

  • 请问,文本字段中的文本不是实时更新的吗?
  • 我不知道,即使在问题中也没有提到。
  • 对,我只是从目标对象推断为一个文本字段...随便 ;)
【解决方案3】:

使用 NSNumberFormatter,

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

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

[formatter release];

【讨论】:

    【解决方案4】:

    请尝试以下功能

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

    【讨论】:

      猜你喜欢
      • 2010-12-31
      • 1970-01-01
      • 2011-09-30
      • 2015-05-28
      • 1970-01-01
      • 2012-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多