2012-03-23 4 views
6

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

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

ありがとうございます!相続人

答えて

10

私はそれが

と信じている
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
formatter.usesSignificantDigits = YES; 
formatter.maximumSignificantDigits = 3; 

は、正確に3桁の数字を表示します。つまり、小数点の前に2、小数点の前に1または1、小数点の前に1、後に2が表示されます。

+1

はい、これは素晴らしいです。 'usesSignificantDigits'フラグをYESに設定することは、OPのこの解決策の鍵です。私はちょうどこれを使用し、実際には小数点を越えて動作します。たとえば、$ 19.17から$ 19.20に変換します。 –

+0

私の質問http://stackoverflow.com/questions/35112206/how-to-show-only-first-two-numbers-in-nsnumberformatterをご確認ください。それはスイフトで私のために働かない – Alexander

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]; 
} 

を、これはうまく働きました。

+0

質問を理解していただきありがとうございます。 「有効桁数」と「小数点以下の桁数」には違いがあります。 –

4

おそらく、あなたも(ただし、わからない)を設定する必要があります。

[distanceFormatter setUsesSignificantDigits: YES];

しかし、あなたの場合にはそれだけの書式設定標準文字列を使用して、おそらくはるかに簡単です:

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

(注をこれは最後の数字を丸める)

関連する問題