Objective C计算器显示科学记数法

时间:2012-08-13 08:46:42

标签: objective-c formatting calculator

所以我在目标C中编写了一个计算器,我将显示格式化为.4g,因为我只想要有效数字和4位小数。这工作正常:) 我想要它做的是不显示2.34E + 05等显示更长的数字,如234,000。我允许它自动标记标签中的文本,所以我知道这不仅仅是标签太小。 是否有一段代码可以显示实际数字而不是科学记数法?

1 个答案:

答案 0 :(得分:1)

使用%f而不是%g进行格式化不会使用standard form

看看这个specification


编辑1:

我找到了this answer来帮助进行舍入。

-(float) round:(float)num toSignificantFigures:(int)n {
    if(num == 0) {
        return 0;
    }

    double d = ceil(log10(num < 0 ? -num: num));
    int power = n - (int) d;

    double magnitude = pow(10, power);
    long shifted = round(num*magnitude);
    return shifted/magnitude;
}

然后我将这两个选项结合起来得到:

NSLog(@"%.0f", [self round:number toSignificantFigures:4]); 

编辑2:

这个怎么样:

- (NSString *) floatToString:(float) val {
    NSString *ret = [NSString stringWithFormat:@"%.5f", val];
    unichar c = [ret characterAtIndex:[ret length] - 1];
    while (c == 48 || c == 46) { // 0 or .
        ret = [ret substringToIndex:[ret length] - 1];
        c = [ret characterAtIndex:[ret length] - 1];
    }
    return ret;
}

我没有对此进行测试,但看起来它将小数限制为5,然后删除任何尾随的零或小数点。

<子> [Source]