2015-06-26 3 views
10

मुझे इस पर कोई संसाधन नहीं मिल रहा है, और मैं सभी प्रकार की चीजों की कोशिश कर रहा हूं, लेकिन कुछ भी काम नहीं करता है।स्विफ्ट में NSDecimalNumber कैसे गोल करें?

एप्पल के प्रलेखन के अनुसार, अगर आप इस तरह एक NSDecimalNumber दौर:

NSDecimalNumber.decimalNumberByRoundingAccordingToBehavior(<#behavior: NSDecimalNumberBehaviors?#>) 

यह एक NSDecimalNumberBehavior, जो मैं अनिश्चित हूँ में ले जाता है कैसे हेरफेर करने के बाद से यह (1) एक चर में पदार्पण नहीं किया जा सकता है और यह गुण बदल गया है, और (2) दस्तावेज के अनुसार roundingMode() विधि कोई पैरामीटर नहीं लेता है, लेकिन एक्सकोड "स्वयं" के लिए पैरामीटर स्पेस में भर जाता है।

मैं इस पर पूरी तरह से खो गया हूं। मूल प्रश्न पर वापस; मैं एनएसडीसीमल नम्बर को तेजी से कैसे घुमा सकता हूं?

अग्रिम

+0

NSDecimalNumber.decimalNumberByRoundingAccordingToBehavior: क्लास विधि नहीं है। इसका मतलब यह है कि आप अपने गोलाकार मूल्य प्राप्त करने के लिए दशमलव संख्या उदाहरण पर कॉल कर सकते हैं। –

उत्तर

7

धन्यवाद आपको लगता है कि

let x = 5 
let y = 2 
let total = x.decimalNumberByDividingBy(y).decimalNumberByRoundingAccordingToBehavior(NSDecimalNumberHandler(roundingMode: NSRoundingMode.RoundUp, scale: 0, raiseOnExactness: false, raiseOnOverflow: false, raiseOnUnderflow: false, raiseOnDivideByZero: false)) 
+1

स्विफ्ट में स्ट्रिंग मैनिपुलेशन और अन्य चीजों की तरह, क्या कोई और इस बात से परेशान है कि इसे करने के लिए कितना कोड आवश्यक है? – NullHypothesis

7

NSDecimalNumberBehaviors की तरह यह कर सकते हैं एक प्रोटोकॉल है और इस तरह instantiated नहीं किया जा सकता है। प्रोटोकॉल के अनुरूप आपको कक्षा की ऑब्जेक्ट की आवश्यकता है। एप्पल इस उद्देश्य के लिए वर्ग NSDecimalNumberHandler, उदा .:

let handler = NSDecimalNumberHandler(roundingMode: NSRoundingMode.RoundBankers, scale: 0, raiseOnExactness: false, raiseOnOverflow: false, raiseOnUnderflow: false, raiseOnDivideByZero: false) 
let rounded = dec.decimalNumberByRoundingAccordingToBehavior(handler) 

scale तर्क दशमलव की संख्या आप चाहते हैं, जैसे कि, 0 एक पूर्णांक के लिए राउंड है प्रदान करता है।

+0

डिफ़ॉल्ट DecimalNumberHandler का उपयोग किसी भी गोल करने के लिए प्रतीत नहीं होता है। क्या आप एक उदाहरण प्रदान कर सकते हैं? – Naldhelaan

+0

@Naldhelaan डिफ़ॉल्ट हैंडलर के बारे में मेरा बुरा, अपना खुद का निर्माण करने के लिए उदाहरण देखें। – Arkku

1
// get a decimal num from a string 

let num = NSDecimalNumber.init(string: numStr) 

// create an NSDecimalNumberHandler instance 

let behaviour = NSDecimalNumberHandler(roundingMode:.RoundUp, 
scale: 1, raiseOnExactness: false, 
raiseOnOverflow: false, raiseOnUnderflow: 
false, raiseOnDivideByZero: false) 

// pass the handler to the method decimalNumberByRoundingAccordingToBehaviour. 

// This is an instance method on NSDecimalNumber that takes an object that 
// conforms to the protocol NSDecimalNumberBehaviors, which NSDecimalNumberHandler does! 

let numRounded = num.decimalNumberByRoundingAccordingToBehavior(behaviour) 
संबंधित मुद्दे