2 दशमलव स्थानों पर गोल डबल मान


87

मेरे पास 22.368511 के रूप में दोहरा मूल्य है मैं इसे 2 दशमलव स्थानों पर गोल करना चाहता हूं। यानी इसे 22.37 लौटाना चाहिए

मैं उसे कैसे कर सकता हूँ?


1
क्या आप 2 दशमलव स्थानों के साथ उस मान को वापस करना चाहते हैं? या 2 दशमलव स्थानों के साथ मूल्य प्रदर्शित करें?
Thelaws

वास्तव में मुझे सिर्फ इसे प्रदर्शित करने की आवश्यकता है
testndtv

जवाबों:


189

जैसा कि अधिकांश भाषाओं में प्रारूप होता है

%.2f

आप यहां और उदाहरण देख सकते हैं


संपादित करें : 25.00 के मामलों में बिंदु के प्रदर्शन के बारे में चिंतित होने पर मुझे यह भी मिला

{
    NSNumberFormatter *fmt = [[NSNumberFormatter alloc] init];
    [fmt setPositiveFormat:@"0.##"];
    NSLog(@"%@", [fmt stringFromNumber:[NSNumber numberWithFloat:25.342]]);
    NSLog(@"%@", [fmt stringFromNumber:[NSNumber numberWithFloat:25.3]]);
    NSLog(@"%@", [fmt stringFromNumber:[NSNumber numberWithFloat:25.0]]);
}
2010-08-22 15:04:10.614 a.out[6954:903] 25.34
2010-08-22 15:04:10.616 a.out[6954:903] 25.3
2010-08-22 15:04:10.617 a.out[6954:903] 25

13
IOS पर, मुझे उपयोग करना था setPositiveFormat:, क्योंकि setFormat:विधि मौजूद नहीं थी (केवल मैक के लिए परिभाषित), लेकिन फिर भी - महान जवाब, मुझे प्रयोग करने के घंटे बचाए, इसलिए +1 और आपके लिए बड़ा धन्यवाद :)
FurloSK

1
एक समस्या: गोल नहीं है, लेकिन छोटा है। संभवतः, आपके कोड के साथ प्रश्नकर्ता द्वारा प्रदान किए गए इनपुट मूल्य का उपयोग करते हुए, परिणाम वह नहीं होगा जो उसने उम्मीद की थी (22.37) - (22.36)।
जेम्स बुश

लेकिन आप इसे आगे की गणना के लिए उपयोग नहीं कर सकते हैं
पराग बाफना

70

आप इसे दो दशमलव स्थानों पर प्रारूपित करने के लिए नीचे दिए गए कोड का उपयोग कर सकते हैं

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];

[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setMaximumFractionDigits:2];
[formatter setRoundingMode: NSNumberFormatterRoundUp];

NSString *numberString = [formatter stringFromNumber:[NSNumber numberWithFloat:22.368511]];

NSLog(@"Result...%@",numberString);//Result 22.37

स्विफ्ट 4:

let formatter = NumberFormatter()
formatter.numberStyle = .decimal
formatter.maximumFractionDigits = 2
formatter.roundingMode = .up

let str = String(describing: formatter.string(from: 12.2345)!)

print(str)

2
स्विफ्ट 4 में: str = String (वर्णन करते हुए: formatter.string (12.2345 से)!)
yehyatt

क्या यह संभव है कि परिणाम के 22.36 मूल्य में 6 से 7 तक वृद्धि न हो?
शहबाज अकरम

@ शाहबाजअकरम हां। राउंडिंगमोड के पास कई अन्य विकल्प भी हैं जैसे, NSNumberFormatterRoundDown, NSNumberFormatterRoundHalfDown आदि
अब्दुर्रहमान मुबीन अली

30
 value = (round(value*100)) / 100.0;

5
मेरा मानना ​​है कि यह सबसे सही उत्तर है - उन्होंने इसे गोल करने के लिए कहा - इसे अंत में एक स्ट्रिंग में बदलने के लिए नहीं (या बाद में डबल रूपांतरण वापस करें)।
मार्टिन कोवाचेव



11

आप NSDecimalRound फ़ंक्शन का उपयोग कर सकते हैं


यह उपयोगी है यदि आपका राउंडिंग वैल्यू, (जो कि मुझे भी लगा कि यह सवाल पहले था), लेकिन टिप्पणियों से पता चलता है कि हम्थुर केवल प्रदर्शन को नियंत्रित करने के लिए वाट लगाता है ...
जेसन रोजर्स

6

अपने दोहरे से दशमलव को निकालने के लिए, इस आउटपुट पर एक नज़र डालें

ओबज सी

double hellodouble = 10.025;
NSLog(@"Your value with 2 decimals: %.2f", hellodouble);
NSLog(@"Your value with no decimals: %.0f", hellodouble);

उत्पादन होगा:

10.02 
10

स्विफ्ट 2.1 और एक्सकोड 7.2.1

let hellodouble:Double = 3.14159265358979
print(String(format:"Your value with 2 decimals: %.2f", hellodouble))
print(String(format:"Your value with no decimals: %.0f", hellodouble))

उत्पादन होगा:

3.14 
3

4

मैं जेसन के जवाब के साथ जाने वाला था लेकिन मैंने देखा कि मेरे Xcode (4.3.3) संस्करण में मैं ऐसा नहीं कर सका। इसलिए थोड़ा शोध के बाद मैंने पाया कि उन्होंने हाल ही में कक्षा के तरीकों को बदल दिया है और सभी पुराने को हटा दिया है। तो यहाँ है कि मुझे यह कैसे करना था:

NSNumberFormatter *fmt = [[NSNumberFormatter alloc] init];

[fmt setMaximumFractionDigits:2];
NSLog(@"%@", [fmt stringFromNumber:[NSNumber numberWithFloat:25.342]]);

2

NSNumber का उपयोग करें * aNumber = [NSNumber numberWithDouble: number]; NSNumber के बजाय * aNumber = [NSNumber numberWithFloat: संख्या];

+(NSString *)roundToNearestValue:(double)number
{
    NSNumber *aNumber = [NSNumber numberWithDouble:number];

    NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
    [numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
    [numberFormatter setUsesGroupingSeparator:NO];
    [numberFormatter setMaximumFractionDigits:2];
    [numberFormatter setMinimumFractionDigits:0];
    NSString *string = [numberFormatter stringFromNumber:aNumber];        
    return string;
}

2

स्विफ्ट के लिए एक सरल उपाय है यदि आप या तो फाउंडेशन आयात नहीं कर सकते हैं, राउंड का उपयोग करें () और / या एक स्ट्रिंग नहीं चाहते हैं (आमतौर पर जब आप खेल के मैदान में होते हैं तो):

var number = 31.726354765
var intNumber = Int(number * 1000.0)
var roundedNumber = Double(intNumber) / 1000.0

परिणाम: 31.726


1

मैं Umberto Raimondi प्रकार डबल द्वारा पोस्ट किए गए समाधान का उपयोग करता हूं :

extension Double {
    func roundTo(places:Int) -> Double {
        let divisor = pow(10.0, Double(places))
        return (self * divisor).rounded() / divisor
    }
}

0

आप ऐसा कर सकते हैं:

NSNumberFormatter* f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
[f setFormat:@0.00"];

// test
NSNumber* a = @12;
NSString* s = [f stringFromNumber:a];
NSLog(@"%@", s);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.