2012-03-23 16 views
6

दिखाने के लिए मैं इसे बनाना चाहता हूं ताकि मेरे UILabels में से केवल अधिकतम 3 अंक दिखाए जा सकें। इसलिए, यदि संबंधित मान 3.22478 9 है, तो मैं 3.22 देखना चाहता हूं। यदि मान 12.563 है, तो मैं 12.5 देखना चाहता हूं और यदि मूल्य 2 9 8.38912 है तो मैं 2 9 8 देखना चाहता हूं। मैं इसे पूरा करने के लिए NSNumberFormatter का उपयोग करने का प्रयास कर रहा हूं, लेकिन जब मैं अधिकतम महत्वपूर्ण अंक 3 पर सेट करता हूं दशमलव स्थान के बाद इसमें हमेशा 3 अंक होते हैं। यहां कोड है:NSNumberFormatter अधिकतम 3 अंक

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

मैंने हमेशा सोचा कि 'महत्वपूर्ण अंक' दशमलव बिंदु से पहले और बाद में सभी अंकों का मतलब था। वैसे भी, NSNumberFormatter का उपयोग करके इसे पूरा करने का कोई तरीका है?

धन्यवाद!

उत्तर

10

मुझे विश्वास है कि

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

वही करेगा जो आप चाहते हैं, यानी यह हमेशा 3 अंक दिखाएगा, दशमलव से पहले 2 और दशमलव के बाद 1 या 1 के बाद और 2 बाद में।

+1

हां, यह बहुत अच्छा काम करता है। ओई के लिए इस समाधान के लिए 'उपयोग सिग्निफिशेंटडिजिट्स' ध्वज को सेट करना है। मैंने अभी इसका इस्तेमाल किया है, और वास्तव में यह दशमलव बिंदु पर काम करता है, उदाहरण के लिए यह $ 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]; 

(नोट : यह अंतिम अंक के दौर में होगा)

संबंधित मुद्दे