【问题标题】:NSNumberformatter quasi Scientific notationsNSNumberformatter 准科学记数法
【发布时间】:2012-11-11 12:42:33
【问题描述】:

我需要 NSNumberFormatter 有条件地将非常大或非常小的数字显示为科学记数法。但如果数字可以不显示,我只需要十进制。 6.62e-34 可以,但 4,2E1 不行。

在系统的其他地方,我使用以下方法解决了这个问题:

- (NSString *) formatNumber: (double) d {
    BOOL sci=NO;
    double dd = d;
    if (dd<0.0) dd=(-d); 
    if ((dd>0.0) && (dd<1e-3)) sci=YES;
    if (dd>1e+8) sci=YES;
    if (sci) [nf setNumberStyle:NSNumberFormatterScientificStyle];
    else [nf setNumberStyle:NSNumberFormatterDecimalStyle]; 
    return  [nf stringFromNumber:[NSNumber numberWithDouble:d]];
}

但是在这个特定的地方,整个事情都是在接口构建器中设置的,绑定到托管对象模型并使用数组控制器对象。在tableview中colum的第一个文本单元格中,我拖入了numberformatter。我不知道是否可以定义一些要调用的自定义方法来进行格式化,而不是使用这个 NumberFormatter。如果我把它拿走,我在运行它时会出错。

有人知道吗?

【问题讨论】:

  • 可以使用if-else进行相应的检查和显示...
  • 你想要一个 NSNumberFormatter 的 6.62e-32 和 421 吗?
  • 您是使用数据源填充表格视图,还是使用绑定?
  • 我正在使用绑定到托管对象模型,并将 NSNumberFormatter 拖到表格的文本单元格中,并直接在 xcode 的 .xib 编辑器中进行配置。数组控制器的绑定和所有内容都在此处设置。在我正在研究的系统的其他地方,我已经编写了一个解决方案来根据数字的值打开和关闭这种打开和关闭科学模式。这里没有编程,我不知道在哪里放代码绕过它。
  • 致@AnoopVaidya:是的,就是Xcode的.xib编辑器中表格单元格中放入的numberformatter。

标签: objective-c cocoa nsnumberformatter


【解决方案1】:

您要做的是编写一个 NSValueTransformer 的子类。然后,您可以在绑定检查器中提供 IB 中该转换器类的名称。这是一个例子:

@implementation RDTransformer

- (id)init {
    if (self = [super init]) {
        self.formatter = [[NSNumberFormatter alloc] init];
        [self.formatter setNumberStyle:NSNumberFormatterScientificStyle];
        [self.formatter setMaximumFractionDigits:3];
    }
    return self;
}

+(Class)transformedValueClass {
    return [NSString class];
}

+(BOOL)allowsReverseTransformation {
    return NO;
}

-(id)transformedValue:(NSNumber *)value {
    if ([value compare:@1000] == NSOrderedAscending) {
        return value.stringValue;
    }else{
        return [self.formatter stringFromNumber:value];
    }

}

在 IB 中,列(在单列表中)的值通过 RDTransformer 的值转换器绑定到 Array Controller.arrangedObjects。我没有任何格式化程序连接到表格单元格。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多