अपनी आवश्यकताओं के अनुसार, स्विफ्ट 5 के साथ, आप 9 में से एक शैली का चयन कर सकते हैं ताकि एक से एक गोल परिणाम हो सके Double।
# 1। का उपयोग करते हुएFloatingPoint rounded()विधि
सबसे सरल मामले में, आप Double rounded()विधि का उपयोग कर सकते हैं ।
let roundedValue1 = (0.6844 * 1000).rounded() / 1000
let roundedValue2 = (0.6849 * 1000).rounded() / 1000
print(roundedValue1) // returns 0.684
print(roundedValue2) // returns 0.685
# 2। FloatingPoint rounded(_:)विधि का उपयोग करना
let roundedValue1 = (0.6844 * 1000).rounded(.toNearestOrEven) / 1000
let roundedValue2 = (0.6849 * 1000).rounded(.toNearestOrEven) / 1000
print(roundedValue1) // returns 0.684
print(roundedValue2) // returns 0.685
# 3। डार्विन का उपयोग करनाround फ़ंक्शन
roundडार्विन के माध्यम से फाउंडेशन एक समारोह प्रदान करता है ।
import Foundation
let roundedValue1 = round(0.6844 * 1000) / 1000
let roundedValue2 = round(0.6849 * 1000) / 1000
print(roundedValue1) // returns 0.684
print(roundedValue2) // returns 0.685
# 4। Doubleडार्विन roundऔर powकार्यों के साथ निर्मित एक विस्तार कस्टम विधि का उपयोग करना
यदि आप पिछले ऑपरेशन को कई बार दोहराना चाहते हैं, तो अपने कोड को फिर से भरना एक अच्छा विचार हो सकता है।
import Foundation
extension Double {
func roundToDecimal(_ fractionDigits: Int) -> Double {
let multiplier = pow(10, Double(fractionDigits))
return Darwin.round(self * multiplier) / multiplier
}
}
let roundedValue1 = 0.6844.roundToDecimal(3)
let roundedValue2 = 0.6849.roundToDecimal(3)
print(roundedValue1) // returns 0.684
print(roundedValue2) // returns 0.685
यदि आवश्यक हो, तो NSDecimalNumberदशमलव संख्याओं को गोल करने के लिए एक क्रिया लेकिन शक्तिशाली समाधान प्रदान करता है।
import Foundation
let scale: Int16 = 3
let behavior = NSDecimalNumberHandler(roundingMode: .plain, scale: scale, raiseOnExactness: false, raiseOnOverflow: false, raiseOnUnderflow: false, raiseOnDivideByZero: true)
let roundedValue1 = NSDecimalNumber(value: 0.6844).rounding(accordingToBehavior: behavior)
let roundedValue2 = NSDecimalNumber(value: 0.6849).rounding(accordingToBehavior: behavior)
print(roundedValue1) // returns 0.684
print(roundedValue2) // returns 0.685
import Foundation
let scale = 3
var value1 = Decimal(0.6844)
var value2 = Decimal(0.6849)
var roundedValue1 = Decimal()
var roundedValue2 = Decimal()
NSDecimalRound(&roundedValue1, &value1, scale, NSDecimalNumber.RoundingMode.plain)
NSDecimalRound(&roundedValue2, &value2, scale, NSDecimalNumber.RoundingMode.plain)
print(roundedValue1) // returns 0.684
print(roundedValue2) // returns 0.685
# 7। का उपयोग करते हुएNSString init(format:arguments:)इनिशियलाइज़र करना
यदि आप NSStringअपने राउंडिंग ऑपरेशन से लौटना चाहते हैं , तो NSStringइनिशलाइज़र का उपयोग करना एक सरल लेकिन कुशल उपाय है।
import Foundation
let roundedValue1 = NSString(format: "%.3f", 0.6844)
let roundedValue2 = NSString(format: "%.3f", 0.6849)
print(roundedValue1) // prints 0.684
print(roundedValue2) // prints 0.685
# 8। String init(format:_:)इनिशियलाइज़र का उपयोग करना
स्विफ्ट के Stringप्रकार को फाउंडेशन की NSStringकक्षा के साथ जोड़ा जाता है । इसलिए, आप Stringअपने राउंडिंग ऑपरेशन से लौटने के लिए निम्नलिखित कोड का उपयोग कर सकते हैं :
import Foundation
let roundedValue1 = String(format: "%.3f", 0.6844)
let roundedValue2 = String(format: "%.3f", 0.6849)
print(roundedValue1) // prints 0.684
print(roundedValue2) // prints 0.685
यदि आप String?अपने गोल संचालन से प्राप्त करने की अपेक्षा करते हैं , तो NumberFormatterएक उच्च अनुकूलन समाधान प्रदान करता है।
import Foundation
let formatter = NumberFormatter()
formatter.numberStyle = NumberFormatter.Style.decimal
formatter.roundingMode = NumberFormatter.RoundingMode.halfUp
formatter.maximumFractionDigits = 3
let roundedValue1 = formatter.string(from: 0.6844)
let roundedValue2 = formatter.string(from: 0.6849)
print(String(describing: roundedValue1)) // prints Optional("0.684")
print(String(describing: roundedValue2)) // prints Optional("0.685")
round(_:),Doubleround(),NSStringप्रारंभकर्ता,Stringप्रारंभकर्ता,NumberFormatter, डबल विस्तार या यहां तक किNSDecimalNumberऔरDecimal।