2012-03-23 47 views
6

Tôi muốn biến nó thành một trong những UILabels của tôi chỉ hiển thị tối đa 3 chữ số. Vì vậy, nếu giá trị liên quan là 3.224789, tôi muốn xem 3.22. Nếu giá trị là 12.563, tôi muốn xem 12.5 và nếu giá trị là 298.38912 thì tôi muốn xem 298. Tôi đã cố gắng sử dụng NSNumberFormatter để thực hiện việc này, nhưng khi tôi đặt các chữ số có nghĩa tối đa là 3 nó luôn có 3 chữ số sau dấu thập phân. Đây là mã:NSNumberFormatter để hiển thị tối đa 3 chữ số

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

Tôi luôn nghĩ 'chữ số có nghĩa' nghĩa là tất cả các chữ số, trước và sau dấu thập phân. Dù sao, là có một cách để hoàn thành điều này bằng cách sử dụng NSNumberFormatter?

Cảm ơn!

Trả lời

10

Tôi tin rằng

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

sẽ thực hiện chính xác những gì bạn muốn, tức là nó sẽ luôn hiển thị chính xác 3 chữ số, có thể là 2 trước số thập phân và 1 sau hoặc 1 trước dấu thập phân và 2 sau.

+1

Có, công trình này rất tuyệt. Đặt cờ 'usesSignificantDigits' thành YES là chìa khóa cho giải pháp này cho OP. Tôi chỉ sử dụng điều này, và thực sự nó hoạt động trên các điểm thập phân, ví dụ nó chuyển đổi $ 19,17 đến $ 19,20. –

+0

vui lòng kiểm tra câu hỏi của tôi http://stackoverflow.com/questions/35112206/how-to-show-only-first-two-numbers-in-nsnumberformatter. Nó không hiệu quả với tôi trong Swift – Alexander

2

Heres một chức năng nhỏ tôi đã viết:

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

Trong các thử nghiệm của tôi, điều này làm việc tốt.

+0

Cảm ơn bạn đã hiểu câu hỏi. Có sự khác biệt giữa "chữ số có nghĩa" và "số chữ số ở bên phải dấu thập phân". –

4

Có lẽ bạn cũng phải thiết lập (không chắc chắn mặc dù):

[distanceFormatter setUsesSignificantDigits: YES];

Nhưng trong trường hợp của bạn nó có thể dễ dàng hơn để chỉ cần sử dụng định dạng chuỗi tiêu chuẩn:

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

(lưu ý : điều này sẽ làm tròn chữ số cuối cùng)

Các vấn đề liên quan