【发布时间】:2011-01-15 02:01:50
【问题描述】:
如果我有一个数字 int aNum = 2000000 我如何格式化它以便可以将其显示为 NSString 2,000,000?
【问题讨论】:
标签: objective-c nsstring
如果我有一个数字 int aNum = 2000000 我如何格式化它以便可以将其显示为 NSString 2,000,000?
【问题讨论】:
标签: objective-c nsstring
对于那些需要使用数字字符串而不仅仅是整数(即大数字)的人,我制作了以下宏:
#define addCommas(__string) (\
(^NSString *(void){\
NSString *__numberString = __string;\
NSString *__integerPortion = __numberString;\
NSString *__decimalPortion = @"";\
if ([__string containsString:@"."]) {\
__integerPortion = [__numberString componentsSeparatedByString:@"."][0];\
__decimalPortion = st(@".%@", [__numberString componentsSeparatedByString:@"."][1]);\
}\
int __i = (int)__integerPortion.length-3;\
while (__i > 0) {\
__integerPortion = st(@"%@,%@", substringInRange(__integerPortion, 0, __i), substringInRange(__integerPortion, __i, (int)__integerPortion.length));\
__i -= 3;\
}\
__numberString = st(@"%@%@", __integerPortion, __decimalPortion);\
return __numberString;\
})()\
)
【讨论】:
对于 Swift 4.0
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
formatter.minimumFractionDigits = 2
formatter.maximumFractionDigits = 2
let result = formatter.string(from: NSNumber(value: 123456))
【讨论】:
一个简单的解决方案可能是这样。我的答案与@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]]];
【讨论】:
想一想,因为我会在这篇文章中寻找样本。 因此,如果您正在使用数字,请注意下一个参数:
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]];
【讨论】:
NSLocale 的简单方法只需添加[formatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"de_DE"]]; 以使用不同的分隔符,取决于本地数字样式
setMaximumFractionDigits 设置您需要的数字位数
斯威夫特版本
let formatter = NSNumberFormatter()
formatter.numberStyle = .DecimalStyle
formatter.maximumFractionDigits = decimalPlaces
let result = formatter.stringFromNumber(NSNumber(double: 8.0))
【讨论】:
更简单:
NSNumber *someNumber = @(1234567890);
NSString *modelNumberString = [NSString localizedStringWithFormat:@"%@", someNumber];
NSLog(@"Number with commas: %@", modelNumberString);
同事今天刚刚教我这个。 #惊人的
【讨论】:
使用NSNumberFormatter。
具体来说:
NSNumberFormatter *formatter = [NSNumberFormatter new];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle]; // this line is important!
NSString *formatted = [formatter stringFromNumber:[NSNumber numberWithInteger:2000000]];
[formatter release];
默认情况下NSNumberFormatter 使用当前语言环境,因此默认情况下分组分隔符设置为正确的值。关键是要记住设置数字样式。
【讨论】:
不要自己进行数字格式化。您几乎肯定不会正确处理所有边缘情况或正确处理所有可能的语言环境。使用NSNumberFormatter 将数字数据格式化为本地化的字符串表示形式。
您可以使用NSNumberFormatter 实例方法-setGroupingSeparator: 将分组分隔符设置为@","(或者更好的是[[NSLocale currentLocale] objectForKey:NSLocaleGroupingSeparator];感谢@ntesler)和-setGroupingSize:,以便每3 位数放置一个分组分隔符。
【讨论】:
[formatter setGroupingSeparator: [[NSLocale currentLocale] objectForKey:NSLocaleGroupingSeparator]];进行本地化
static method on NSNumberFormatter 可以满足您的需求:
int aNum = 2000000;
NSString *display = [NSNumberFormatter localizedStringFromNumber:@(aNum)
numberStyle:NSNumberFormatterDecimalStyle];
如果您不需要对格式化程序进行任何额外配置,这种方式比创建新的NSNumberFormatter 更简洁一些。
【讨论】: