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


85

मैं currentRatioदो दशमलव स्थानों तक कैसे चक्कर लगा सकता हूं ?

let currentRatio = Double (rxCurrentTextField.text!)! / Double (txCurrentTextField.text!)!
railRatioLabelField.text! = "\(currentRatio)"

क्या आप केवल currentRatioदो दशमलव स्थानों पर गोल करना चाहते हैं, या हमेशा गोल करना चाहते हैं? Ex: क्या आप 3.141 -> 3.14 या 3.141 -> 3.14 चाहते हैं?
जाल

हाय जाल, मैं 3.149 को 3.15 के रूप में प्रदर्शित करना चाहता हूं। हालाँकि 3.141 को 3.14 प्रदर्शित करना चाहिए। साभार
Del Hinds

सही गोलाई के लिए मेरे उत्तर का पहला भाग देखें।
JAL

जवाबों:


171

दो दशमलव स्थानों तक चक्कर लगाने और doubleएक को बदलने के लिए एक प्रारूप स्ट्रिंग का उपयोग करें String:

let currentRatio = Double (rxCurrentTextField.text!)! / Double (txCurrentTextField.text!)!
railRatioLabelField.text! = String(format: "%.2f", currentRatio)

उदाहरण:

let myDouble = 3.141
let doubleStr = String(format: "%.2f", myDouble) // "3.14"

यदि आप अपने अंतिम दशमलव स्थान को गोल करना चाहते हैं, तो आप ऐसा कुछ कर सकते हैं (धन्यवाद Phoen1xUK)

let myDouble = 3.141
let doubleStr = String(format: "%.2f", ceil(myDouble*100)/100) // "3.15"

दो दशमलव स्थानों तक गोलाई लिए जाने पर 3.15 की आवश्यकता होती है।
मैट ले फ्लूर

मैंने सोचा कि ओपी केवल दो दशमलव स्थानों पर चक्कर लगाना चाहता था, आवश्यक रूप से ऊपर या नीचे गोल करना। बस स्पष्टीकरण के लिए एक टिप्पणी जोड़ी गई।
जाल

हाय जल, धन्यवाद, मैंने आपके उत्तर का उपयोग किया जो कि थोड़ा सा संशोधन के साथ काम करता है: - _ = डबल (rxCurrentTextField.text!)! / डबल (txCurrentTextField.text!) railRatioLabelField.text! = स्ट्रिंग (प्रारूप: "%। 2 एफ", करंट रेशियो)
डेल हिंड्स

2
यह उत्तर इस प्रश्न के लिए है: "टेक्स्ट लेबल में दो अंकों के साथ डबल कैसे प्रदर्शित करें" या "... स्ट्रिंग के रूप में", यह उत्तर इस सवाल का जवाब नहीं देता है "गोल 2 से 2 दशमलव स्थानों तक"
mnl

@ जाल मुझे पूर्व के लिए बिंदु के बाद .5 या 0 की आवश्यकता है। अगर हमारे पास २३.४ है तो उसे २३.५ देना चाहिए और अगर
गुरु

29

(स्विफ्ट 4.2 Xcode 11) एक्सटेंशन का उपयोग करने के लिए सरल: -

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

उपयोग:-

if let distanceDb = Double(strDistance) {
   cell.lblDistance.text = "\(distanceDb.round(to:2)) km"
}

प्रतिभाशाली। मैं वास्तव में उसी संपत्ति (डबल) में बदलना चाहता था। आपके विस्तार ने मेरी समस्या हल कर दी। धन्यवाद!
मार्सेलो डॉस सैंटोस

:-) हैप्पी कोडिंग
मेहुल

मुझे लगता है कि तुम्हारा सही उत्तर है। मैं सिर्फ एक सिंटैक्स संशोधन को फंक में जोड़ना चाहूंगा। func round(to places: Int) -> Double {
23

1
@ 23inhouse, मैंने आपके सुझावों के अनुसार उत्तर को अपडेट कर दिया है। धन्यवाद
मेहुल

28

SWIFT 4 को अपडेट किया गया और प्रश्न के लिए उचित उत्तर

यदि आप 2 दशमलव स्थानों तक राउंड करना चाहते हैं, तो आपको 100 से गुणा करना चाहिए और फिर इसे 100 से विभाजित करना होगा

var x = 1.5657676754 
var y = (x*100).rounded()/100
print(y)  // 1.57 

1
हाय - मुझे समझ में नहीं आता है कि आप एक निश्चित संख्या में दशमलव वापस करने के संदर्भ में अपनी गणना कैसे करते हैं। क्या होगा यदि मैं चाहता हूँ कि यह 3 दशमलव स्थान पर लौटे
सिपाह कोजा

बस गुणा यह 1000 से और फिर उसका 1000 से विभाजित @SiphoKoza
चेतन Rajagiri

यह वास्तव में "उचित" उत्तर नहीं है क्योंकि आंतरिक रूप से, संख्या को फ़्लोटिंग पॉइंट में सहेजा जाता है, बेस 2 के साथ है, और आप बेस 10 नंबर का प्रतिनिधित्व करने का प्रयास कर रहे हैं। कुछ संख्याओं के लिए एक सटीक प्रतिनिधित्व नहीं है, और जब आप मूल्य प्रिंट करने के लिए जाते हैं तो आप बहुत सारे अंकों के साथ हवा देंगे। उचित उत्तर को एक स्ट्रिंग लौटना चाहिए, न कि डबल या फ्लोट।
विक्टर एंगेल

@ लेवन यह शून्य के लिए भी काम करता है, बस सुनिश्चित करें कि यह एक डबल है
चेतन राजगिरि

1
महान जवाब, मुझे लगता है कि यह स्वीकार किया जाना चाहिए।
אורי orihpt

13

इस उद्देश्य के लिए नंबरफ़ॉर्मर का उपयोग करने पर विचार करें, यह अधिक लचीलापन प्रदान करता है यदि आप अनुपात के प्रतिशत चिन्ह को प्रिंट करना चाहते हैं या यदि आपके पास मुद्रा और बड़ी संख्या जैसी चीजें हैं।

let amount = 10.000001
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
formatter.maximumFractionDigits = 2
let formattedAmount = formatter.string(from: amount as NSNumber)! 
print(formattedAmount) // 10

11

उपरोक्त उत्तर में जोड़ना अगर हम कई बार डबल प्रारूप करना चाहते हैं, तो हम नीचे की तरह डबल के प्रोटोकॉल एक्सटेंशन का उपयोग कर सकते हैं:

extension Double {
    var dollarString:String {
        return String(format: "$%.2f", self)
    }
}

let a = 45.666

print(a.dollarString) //will print "$45.67"

1
प्रिंट नहीं होना चाहिए (a.dollarString)?
18

5

दशमलव के बाद विशिष्ट अंकों के लिए कोड है:

var roundedString = String(format: "%.2f", currentRatio)

यहां% .2f इस संख्या को 2 दशमलव स्थानों पर गोल करने के लिए स्विफ्ट को बताता है।


4

@ घायल , एक तेज 5.1 संपत्ति आवरण उदाहरण:

struct GameResult {
    @Rounded(rule: NSDecimalNumber.RoundingMode.up,scale: 4)
    var score: Decimal
}

var result = GameResult()
result.score = 3.14159265358979
print(result.score) // 3.1416


0

मेरे जैसे नोब्स के लिए बस एक त्वरित अनुवर्ती उत्तर:

आप आउटपुट के साथ फ़ंक्शन का उपयोग करके अन्य उत्तरों को सुपर आसानी से लागू कर सकते हैं । उदाहरण के लिए

  func twoDecimals(number: Float) -> String{
    return String(format: "%.2f", number)
}

इस तरह, जब भी आप 2 दशमलव स्थानों के लिए मान लेना चाहते हैं तो आप टाइप करें

TwoDecimals (' आपका नंबर यहां ')

...

साधारण!

PS आप इसे एक फ्लोट मान, या जो कुछ भी आप चाहते हैं, उसे वापस कर सकते हैं, तब तक स्ट्रिंग के रूपांतरण के बाद इसे फिर से इस प्रकार परिवर्तित कर सकते हैं:

 func twoDecimals(number: Float) -> Float{
    let stringValue = String(format: "%.2f", number)
    return Float(stringValue)!
}

उम्मीद है की वो मदद करदे।


-1

यदि आप इसे 234.545332233 देते हैं तो यह आपको 234.54 देगा

let textData = Double(myTextField.text!)!
let text = String(format: "%.2f", arguments: [textData])
mylabel.text = text

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