एक फ्लोट बनाओ केवल दो दशमलव स्थानों को दिखाएं


296

मेरे पास एक मूल्य 25.00है float, लेकिन जब मैं इसे स्क्रीन पर प्रिंट करता हूं तो यह होता है 25.0000000
मैं केवल दो दशमलव स्थानों के साथ मूल्य कैसे प्रदर्शित कर सकता हूं?


var nf = NSNumberFormatter () nf.positiveFormat = "0। ##" var numberAfterRound = nf.stringFromNumber (NSNumber (दोहरा: संख्या))!
कल्पेशदेव

जवाबों:


648

यह कोई बात नहीं है कि संख्या कैसे संग्रहीत की जाती है, यह एक बात है कि आप इसे कैसे प्रदर्शित कर रहे हैं। इसे एक स्ट्रिंग में परिवर्तित करते समय आपको वांछित सटीकता के लिए गोल करना चाहिए, जो आपके मामले में दो दशमलव स्थान है।

उदाहरण के लिए:

NSString* formattedNumber = [NSString stringWithFormat:@"%.02f", myFloat];

%.02f फ़ॉर्मेटर को बताता है कि आप एक फ़्लोट प्रारूपण करेंगे (%f ) हैं, और इसे दो स्थानों पर गोल किया जाना चाहिए, और 0एस के बाद गद्देदार होना चाहिए ।

उदाहरण के लिए:

%f = 25.000000
%.f = 25
%.02f = 25.00

7
मैंने देखा कि% .2f का उपयोग करना वास्तव में आपके उदाहरण में 25.00 है और 25 नहीं। यह अजीब है।
फुलवियो

3
जिस तरह से मैं हमेशा समझा जाता था कि दशमलव बिंदु के बाद की संख्या ने कहा कि आपको कितना दशमलव मिला। तो, .2f वास्तव में 25.00 देगा, और .4f 25.0000 देगा।
एरिक एस

3
अगर किसी को इस बात की उत्सुकता है कि वास्तव में कोई कैसे प्राप्त करता है 25.. @"%.f"क्या चाल है। ऊपर जो लिखा है, वह नहीं
एलेक्स ग्रे

4
@acecapades, यदि आप उपयोग करते हैं@"%.*f", decimalPlaces, number
जोनाथन।

12
संभवतः यह एक आंशिक ऑफ-टॉपिक होगा, लेकिन मैं एक और प्रारूप %03.f = 025
जोड़ूंगा

197

यहाँ कुछ सुधार हैं-

//for 3145.559706

स्विफ्ट 3

let num: CGFloat = 3145.559706
print(String(format: "%f", num)) = 3145.559706
print(String(format: "%.f", num)) = 3145
print(String(format: "%.1f", num)) = 3145.6
print(String(format: "%.2f", num)) = 3145.56
print(String(format: "%.02f", num)) = 3145.56 // which is equal to @"%.2f"
print(String(format: "%.3f", num)) = 3145.560
print(String(format: "%.03f", num)) = 3145.560 // which is equal to @"%.3f"

Obj सी

@"%f"    = 3145.559706
@"%.f"   = 3146
@"%.1f"  = 3145.6
@"%.2f"  = 3145.56
@"%.02f" = 3145.56 // which is equal to @"%.2f"
@"%.3f"  = 3145.560
@"%.03f" = 3145.560 // which is equal to @"%.3f"

और इसी तरह...


क्या अंतिम एक सटीक है? @ "%। 03 एफ" = 3145.566? आपको .560 की जगह .566 कैसे मिली?
पिक्सफ्रीके

क्या पूर्णांक जो दशमलव स्थानों की संख्या को निर्धारित करता है एक चर हो सकता है? जैसे @ "%। xf" जहां x कोई पूर्णांक हो सकता है?
acecapades

अगर आपको @ "% f।" के साथ समस्या हो रही है, तो @ "%। 0f" आज़माएं। मैंने पाया कि यह कोई भी दशमलव स्थान प्राप्त करने के लिए काम नहीं करता है, जहां एक और नहीं
simon_smiley

1
क्या कोई मुझे बता सकता है कि आप सिर्फ% .2f के बजाय% .02f का उपयोग क्यों करेंगे?
hinterbu

20

आप NSNumberFormatter का उपयोग करके भी देख सकते हैं:

NSNumberFormatter* nf = [[[NSNumberFormatter alloc] init] autorelease];
nf.positiveFormat = @"0.##";
NSString* s = [nf stringFromNumber: [NSNumber numberWithFloat: myFloat]];

आपको नकारात्मक प्रारूप भी सेट करने की आवश्यकता हो सकती है, लेकिन मुझे लगता है कि यह समझ से बाहर है।


आपको इस फ्लोट संख्या की आवश्यकता है numTwoDecimalDigits = atof ([UTF8String]);
लोरेटोपरिसी 19

10

मैंने उपरोक्त उत्तरों के आधार पर एक तेजी से विस्तार किया

extension Float {
    func round(decimalPlace:Int)->Float{
        let format = NSString(format: "%%.%if", decimalPlace)
        let string = NSString(format: format, self)
        return Float(atof(string.UTF8String))
    }
}

उपयोग:

let floatOne:Float = 3.1415926
let floatTwo:Float = 3.1425934
print(floatOne.round(2) == floatTwo.round(2))
// should be true

यह समाधान CGFloat के साथ भी काम करता है। बहुत बढ़िया!
eonist

यह वही है जिसे मैं देख रहा था। धन्यवाद दोस्त!
तुषार कात्याल

9

स्विफ्ट भाषा में, यदि आप दिखाना चाहते हैं तो आपको इसे इस तरह से उपयोग करने की आवश्यकता है। उदाहरण के लिए, UITextView में दोहरा मूल्य प्रदान करने के लिए:

let result = 23.954893
resultTextView.text = NSString(format:"%.2f", result)

यदि आप लॉग में दिखाना चाहते हैं जैसे कि उद्देश्य-सी NSLog () का उपयोग करता है, तो स्विफ्ट भाषा में आप इस तरह से कर सकते हैं:

println(NSString(format:"%.2f", result))

3

यदि आप नियमित चार सरणियों (एनएसएसट्रिंग की ओर संकेत करने के बजाय) का उपयोग कर रहे हैं, तो आप इसका उपयोग भी कर सकते हैं:

printf("%.02f", your_float_var);

OTOH, यदि आप जो चाहते हैं, उस मूल्य को एक चार सरणी पर संग्रहीत करें जो आप उपयोग कर सकते हैं:

sprintf(your_char_ptr, "%.02f", your_float_var);

3

सभी उत्तरों के साथ समस्या यह है कि गुणा करना और फिर सटीक मुद्दों में परिणाम विभाजित करना क्योंकि आपने विभाजन का उपयोग किया था। मैंने यह एक पीडीपी 8 पर प्रोग्रामिंग से बहुत पहले सीखा था। इसे हल करने का तरीका है:

return roundf(number * 100) * .01;

इस प्रकार 15.6578 रिटर्न सिर्फ 15.66 है और 15.6578999 या ऐसा कुछ नहीं है।

आपको किस स्तर की सटीकता चाहिए। बस उत्पाद को विभाजित न करें, इसे दशमलव समकक्ष से गुणा करें। कोई अजीब स्ट्रिंग रूपांतरण की आवश्यकता है।


1

ऑब्जेक्टिव में -c u 2 फ़्लोट संख्या में फ़्लोट मान प्रदर्शित करना चाहता है, फिर यह तर्क देता है कि आप कितने दशमलव पाइंट्स प्रदर्शित करना चाहते हैं जैसे ०.०२ एफ 25.00 प्रिंट करेगा २५.०० u


1

यहां सटीकता के अनुसार गतिशील रूप से प्रारूपित करने के कुछ तरीके दिए गए हैं:

+ (NSNumber *)numberFromString:(NSString *)string
{
    if (string.length) {
        NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
        f.numberStyle = NSNumberFormatterDecimalStyle;
        return [f numberFromString:string];
    } else {
        return nil;
    }
}

+ (NSString *)stringByFormattingString:(NSString *)string toPrecision:(NSInteger)precision
{
    NSNumber *numberValue = [self numberFromString:string];

    if (numberValue) {
        NSString *formatString = [NSString stringWithFormat:@"%%.%ldf", (long)precision];
        return [NSString stringWithFormat:formatString, numberValue.floatValue];
    } else {
        /* return original string */
        return string;
    }
}

जैसे

[TSPAppDelegate stringByFormattingString:@"2.346324" toPrecision:4];

=> 2.3453

[TSPAppDelegate stringByFormattingString:@"2.346324" toPrecision:0];

=> २

[TSPAppDelegate stringByFormattingString:@"2.346324" toPrecision:2];

=> 2.35 (राउंड अप)


यह बहुत अच्छा समाधान है, बड़ा धन्यवाद। क्या आप मुझे समझा सकते हैं कि यह कैसे काम करता है? मुझे लगता है कि आपने अतिरिक्त '%' चिह्न जोड़ दिया है।
यूजीन अलेक्सिएव

1

स्विफ्ट के लिए एक और तरीका (NSString का उपयोग किए बिना):

let percentage = 33.3333
let text = String.localizedStringWithFormat("%.02f %@", percentage, "%")

PS यह समाधान केवल CGFloat प्रकार के साथ काम नहीं कर रहा है, जिसके साथ परीक्षण किया गया है Float&Double


1
@ ज्ञात डाउनवॉटर यह स्विफ्ट के लिए काम कर रहा है और स्विफ्ट के लिए अन्य उत्तरों से अलग भी है तो क्यों?
अक्स

यदि आप एक फ्लोट लौटा सकते हैं, तो आप इसे एक CGFloat में बदल सकते हैं
eonist

1

नीचे के NSNumberFormatterसाथ प्रयोग करें maximumFractionDigits:

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.maximumFractionDigits = 2;
NSLog(@"%@", [formatter stringFromNumber:[NSNumber numberWithFloat:12.345]]);

और आपको मिलेगा 12.35


0

यदि आपको मूल्य के रूप में अच्छी तरह से तैरने की आवश्यकता है:

NSString* formattedNumber = [NSString stringWithFormat:@"%.02f", myFloat];
float floatTwoDecimalDigits = atof([formattedNumber UTF8String]);

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.