如何在目标C中每3个数字添加一个逗号?

如果我有一个数字int aNum = 2000000我如何格式化,以便我可以显示它为NSString 2,000,000?

不要做自己的数字格式。 你几乎肯定不会得到所有的边界情况正确或正确处理所有可能的语言环境。 使用NSNumberFormatter将数字数据格式化为本地化的string表示forms。

你可以使用NSNumberFormatter实例方法-setGroupingSeparator:将分组分隔符设置为@"," (或者更好的是[[NSLocale currentLocale] objectForKey:NSLocaleGroupingSeparator] ;谢谢@ntesler)和-setGroupingSize:将分组分隔符每3个数字。

使用NSNumberFormatter

特别:

 NSNumberFormatter *formatter = [NSNumberFormatter new]; [formatter setNumberStyle:NSNumberFormatterDecimalStyle]; // this line is important! NSString *formatted = [formatter stringFromNumber:[NSNumber numberWithInteger:2000000]]; [formatter release]; 

默认情况下, NSNumberFormatter使用当前语言环境,因此分组分隔符默认设置为正确的值。 关键是要记住设置一个数字风格。

NSNumberFormatter上有一个静态方法 ,它只是你所需要的:

 int aNum = 2000000; NSString *display = [NSNumberFormatter localizedStringFromNumber:@(aNum) numberStyle:NSNumberFormatterDecimalStyle]; 

这种方法比创build一个新的NSNumberFormatter更简洁,如果你不需要做格式化器的任何额外的configuration。

更简单:

 NSNumber *someNumber = @(1234567890); NSString *modelNumberString = [NSString localizedStringWithFormat:@"%@", someNumber]; NSLog(@"Number with commas: %@", modelNumberString); 

同事今天就教了我这个。 #惊人

想一些,因为我会得到这个post寻找样本。 所以如果你正在用数字来关注下一个参数:

 setNumberStyle:NSNumberFormatterCurrencyStyle // if you are working with currency 

也可以

 setNumberStyle:NSNumberFormatterDecimalStyle 

所有的代码是对于ARC。

如果您正在使用Integer,需要获得20万的结果

 int value = 200000; NSNumberFormatter * formatter = [NSNumberFormatter new]; [formatter setNumberStyle:NSNumberFormatterDecimalStyle]; NSString * newString = [formatter stringFromNumber:[NSNumber numberWithInteger:value]]; 

如果你正在使用Float并且需要得到如200,000.00的结果

 float value = 200000; NSNumberFormatter * formatter = [NSNumberFormatter new]; [formatter setNumberStyle:NSNumberFormatterDecimalStyle]; [formatter setMaximumFractionDigits:2]; // Set this if you need 2 digits NSString * newString = [formatter stringFromNumber:[NSNumber numberWithFloat:value]]; 

编辑

有能力使用不同的数字分隔符使用NSLocale 。 添加到在Locale Identifier上指定NSLocale代码中:

 [formatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"de_DE"]]; 

或使用当前的本地:

 [formatter setLocale:[NSLocale currentLocale]]; 

Swift版本

 let formatter = NSNumberFormatter() formatter.numberStyle = .DecimalStyle formatter.maximumFractionDigits = decimalPlaces let result = formatter.stringFromNumber(NSNumber(double: 8.0)) 

通过http://ios.eezytutorials.com

一个简单的解决scheme就是这个 我的回答几乎和@ Nazir的回答一样,但有一个小窍门。

 double current_balance = 2000000.00; NSNumberFormatter * formatter = [NSNumberFormatter new]; [formatter setNumberStyle:NSNumberFormatterDecimalStyle]; //[formatter setNumberStyle:NSNumberFormatterCurrencyStyle]; //if you want for currency with $ sign [formatter setMinimumFractionDigits:2]; // Set this if you need 2 digits [formatter setMaximumFractionDigits:2]; // Set this if you need 2 digits NSString * currency_format = [NSString stringWithFormat:@"%@", [formatter stringFromNumber:[NSNumber numberWithDouble:current_balance]]];