objective-c - 如何避免 NSNumberFormater 中的分组分隔符直到 5 位数字

标签 objective-c macos cocoa numbers nsnumberformatter

我有一个应用程序需要以毫米为单位显示公制单位,并且根据我所做的研究(例如 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/

相关文章:

objective-c - 在 Cocoa 应用程序中定义和执行简单的 AppleScript 命令

objective-c - MKAnnotation 未在 MKMapView 上显示标注

java - 错误: IllegalComponentStateException when pressing JMenuItem in java swing (OSX)

swift - 我怎样才能将返回键功能作为任何启用的按钮 Swift/Cocoa

cocoa - 是否可以更换 Mac 登录屏幕?

excel - 无法将特定表格从 Web 提取到 Excel VBA (Mac) 中的电子表格中

c# - Instagram 到带有 RestSharp 的 TableView

objective-c - 子类 NSView 未出现在自定义 View 中

ios - 将自定义对象序列化为包含NSMutableArray的JSON

c++ - Mac OS X 中的唯一硬件 ID