如果我有一个数字int aNum = 2000000
,我如何格式化这个以便我可以将它显示为NSString 2,000,000?
答案 0 :(得分:146)
使用NSNumberFormatter
。
具体做法是:
NSNumberFormatter *formatter = [NSNumberFormatter new];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle]; // this line is important!
NSString *formatted = [formatter stringFromNumber:[NSNumber numberWithInteger:2000000]];
[formatter release];
默认情况下,NSNumberFormatter
使用当前区域设置,因此默认情况下,分组分隔符将设置为正确的值。关键是要记住设置数字样式。
答案 1 :(得分:80)
不要进行自己的数字格式化。您几乎肯定不会正确处理所有边缘情况或正确处理所有可能的区域设置。使用NSNumberFormatter
将数字数据格式化为本地化字符串表示。
您可以使用NSNumberFormatter
实例方法-setGroupingSeparator:
将分组分隔符设置为@","
(或者更好[[NSLocale currentLocale] objectForKey:NSLocaleGroupingSeparator]
;感谢@ntesler)和-setGroupingSize:
每3个数字放一个分组分隔符。
答案 2 :(得分:32)
有static method on NSNumberFormatter
可以满足您的需求:
int aNum = 2000000;
NSString *display = [NSNumberFormatter localizedStringFromNumber:@(aNum)
numberStyle:NSNumberFormatterDecimalStyle];
如果您不需要对格式化程序进行任何其他配置,这种方式比创建新的NSNumberFormatter
更简洁。
答案 3 :(得分:18)
更容易:
NSNumber *someNumber = @(1234567890);
NSString *modelNumberString = [NSString localizedStringWithFormat:@"%@", someNumber];
NSLog(@"Number with commas: %@", modelNumberString);
今天,同事刚刚教我这个。 #amazing
答案 4 :(得分:15)
想一些,因为我会在这篇文章中寻找样本。 因此,如果您正在使用数字,请注意下一个参数:
setNumberStyle:NSNumberFormatterCurrencyStyle // if you are working with currency
也可能
setNumberStyle:NSNumberFormatterDecimalStyle
所有代码均为ARC。
如果您正在使用Integer并且需要获得200,000
等结果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
。
添加到在区域设置标识符上指定NSLocale
的代码:
[formatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"de_DE"]];
或使用当前本地:
[formatter setLocale:[NSLocale currentLocale]];
答案 5 :(得分:1)
Swift版
let formatter = NSNumberFormatter()
formatter.numberStyle = .DecimalStyle
formatter.maximumFractionDigits = decimalPlaces
let result = formatter.stringFromNumber(NSNumber(double: 8.0))
答案 6 :(得分:0)
一个简单的解决方案就是这样。我的回答几乎和@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]]];
答案 7 :(得分:0)
对于Swift 4.0
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
formatter.minimumFractionDigits = 2
formatter.maximumFractionDigits = 2
let result = formatter.string(from: NSNumber(value: 123456))
答案 8 :(得分:0)
对于那些需要使用数字字符串而不是整数(即大数字)的人,我做了以下宏:
@GET("getInformation/{field}/{username}")
Call < String > getInformation(@Path("field") String field, @Path("username") String username);