我有一个应用程序需要以毫米为单位显示公制单位,并且根据我所做的研究(例如 http://physics.nist.gov/cuu/pdf/sp811.pdf ),建议您在有 5 位数字之前不要添加分组分隔符。这可以用 NSNumberFormatter 实现吗?我知道我可以测试该值并根据其大小启用/禁用分组,但我宁愿为 NSNumberFormatter 使用适当的配置(如果存在)。 (顺便说一句,我使用的是 Mac OS X)例如:
3456 应显示为 3456 毫米
10234 应显示为 10,234 mm(假设逗号是分组分隔符)
我已阅读 Apple 文档,但没有看到任何内容。我尝试了不同的搜索来在 Stackoverflow 上找到答案,但找不到类似的问题。
以下是我目前设置 NSNumberFormatter 的方式:
if (numberFormatter == nil) {
numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setRoundingMode:NSNumberFormatterRoundHalfUp];
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
[numberFormatter setLocale:[NSLocale currentLocale]];
[numberFormatter setMinimumFractionDigits:0];
[numberFormatter setMaximumFractionDigits:2];
}
NSNumber *numberInMM = [NSNumber numberWithFloat:fLenInMMs];
NSString *numberStr = [numberFormatter stringFromNumber:numberInMM];
numberStr = [numberStr stringByAppendingString:@" mm"];
最佳答案
long long d = fLenInMMs;
if (d>9999) {
NSNumberFormatter *numberFormatter=nil;
if (numberFormatter == nil) {
numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setRoundingMode:NSNumberFormatterRoundHalfUp];
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
[numberFormatter setLocale:[NSLocale currentLocale]];
[numberFormatter setMinimumFractionDigits:0];
[numberFormatter setMaximumFractionDigits:2];
}
NSNumber *numberInMM = [NSNumber numberWithFloat:fLenInMMs];
NSString *numberStr = [numberFormatter stringFromNumber:numberInMM];
numberStr = [numberStr stringByAppendingString:@" mm"];
NSLog(@"%@", numberStr);
}
else {
NSNumber *numberInMM = [NSNumber numberWithFloat:fLenInMMs];
NSString *numberStr = [NSString stringWithFormat:@"%@ mm",numberInMM];
}
编辑
您还可以子类化NSNumberFormatter
并实现
- (NSString *)stringFromNumber:(NSNumber *)number
{
NSNumber *nm = [NSNumber numberWithInt:9999];
if (NSOrderedAscending==[number compare:nm]) {
return [NSString stringWithFormat:@"%@ mm",number];
}
return [super stringFromNumber:number];
}
关于objective-c - 如何避免 NSNumberFormater 中的分组分隔符直到 5 位数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13011595/