I can't find any resources on this, and I've been trying all sorts of stuff, but nothing works.
According to Apple's documentation, you round an NSDecimalNumber like this:
NSDecimalNumber.decimalNumberByRoundingAccordingToBehavior(<#behavior: NSDecimalNumberBehaviors?#>)
It takes in an NSDecimalNumberBehavior, which I'm unsure how to manipulate since it (1) cannot be initiated into a variable and have it's properties changed, and (2) the roundingMode() method according to the documentation doesn't take any parameters, but Xcode fills in a parameter space for "self".
I'm totally lost on this. Back to the basic question; How can I round an NSDecimalNumber in swift?
Thanks in advance
答案 0 :(得分:9)
NSDecimalNumberBehaviors
is a protocol and thus cannot be instantiated. You need an object of a class conforming to the protocol. Apple provides the class NSDecimalNumberHandler
for this purpose, e.g.:
let handler = NSDecimalNumberHandler(roundingMode: NSRoundingMode.RoundBankers, scale: 0, raiseOnExactness: false, raiseOnOverflow: false, raiseOnUnderflow: false, raiseOnDivideByZero: false)
let rounded = dec.decimalNumberByRoundingAccordingToBehavior(handler)
The scale
argument is the number of decimals you want, i.e., 0
rounds to an integer.
答案 1 :(得分:7)
you can do it like that
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))
答案 2 :(得分: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)