6

UILabelの1つに最大3桁しか表示されないようにしたいと思います。したがって、関連付けられた値が3.224789の場合、3.22が表示されます。値が12.563の場合、12.5が表示され、値が298.38912の場合、298が表示されます。これを実現するためにNSNumberFormatterを使用しようとしていますが、有効桁数の最大値を3に設定すると常に小数点以下3桁です。コードは次のとおりです。

NSNumberFormatter *distanceFormatter = [[[NSNumberFormatter alloc] init] autorelease];
[distanceFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
[distanceFormatter setAlwaysShowsDecimalSeparator:NO];
[distanceFormatter setMaximumSignificantDigits:3];

私はいつも「有効数字」は小数点の前後のすべての数字を意味すると思っていました。とにかく、NSNumberFormatterを使用してこれを達成する方法はありますか?

ありがとう!

4

3 に答える 3

10

私は信じている

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.usesSignificantDigits = YES;
formatter.maximumSignificantDigits = 3;

正確に希望どおりに動作します。つまり、常に正確に3桁が表示されます。つまり、小数点の前に2桁、小数点の前に1桁、小数点の前に1桁、小数点以下2桁です。

于 2012-12-17T22:32:18.413 に答える
4

おそらく、あなたも設定する必要があります(しかし確かではありません):

[distanceFormatter setUsesSignificantDigits: YES];

しかし、あなたの場合、標準の文字列フォーマットを使用する方がおそらくはるかに簡単です。

CGFloat yourNumber = ...;
NSString* stringValue = [NSString stringWithFormat: @"%.3f", yourNumber];

(注:これは最後の桁を丸めます)

于 2012-03-23T16:41:12.477 に答える
2

これが私が書いた小さな関数です:

int nDigits(double n)
{
    n = fabs(n);
    int nDigits = 0;
    while (n > 1) {
        n /= 10;
        nDigits++;
    }

    return nDigits;
}

NSString *formatNumber(NSNumber *number, int sigFigures)
{
    double num = [number doubleValue];
    int numDigits = nDigits(num);

    NSString *format = [NSString stringWithFormat:@"%%%i.%ilf", sigFigures -= numDigits, sigFigures];

    return [NSString stringWithFormat:format, num];
}

私のテストでは、これはうまくいきました。

于 2012-03-23T16:40:41.290 に答える