【问题标题】:How to avoid grouping separator in NSNumberFormater until 5 digits如何避免在 NSNumberFormater 中将分隔符分组到 5 位
【发布时间】:2012-10-22 12:35:42
【问题描述】:

我有一个应用程序需要以毫米为单位显示公制单位,根据我所做的研究(例如http://physics.nist.gov/cuu/pdf/sp811.pdf),建议您在有 5 位数字之前不要添加分组分隔符。 NSNumberFormatter 有可能吗?我知道我可以测试该值并根据其大小启用/禁用分组,但我宁愿为 NSNumberFormatter 使用适当的配置(如果存在)。 (顺便说一句,我在 Mac OS X 上)例如:

3456 应该显示为 3456 毫米

10234 应该显示为 10,234 毫米(假设逗号是分组分隔符)

我已阅读 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"];

【问题讨论】:

    标签: objective-c macos cocoa numbers nsnumberformatter


    【解决方案1】:
    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];
    }
    

    【讨论】:

    • 实际上,如果您阅读了我的问题,我说过我不想这样做,而是配置 NSNumberFormatter 为我做这件事。此外,您的解决方案的 else 部分将没有正确的十进制格式。你是说用 NSNumberFormatter 不可能做到这一点?
    猜你喜欢
    • 1970-01-01
    • 2021-10-23
    • 2016-05-05
    • 2018-11-17
    • 2014-10-12
    • 2013-08-20
    • 2018-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多