Как объединить NSDecimalNumber в swift?
Я не могу найти никаких ресурсов на этом, и я пробовал всевозможные вещи, но ничего не работает.
Согласно документации Apple, вы обходите NSDecimalNumber следующим образом:
NSDecimalNumber.decimalNumberByRoundingAccordingToBehavior(<#behavior: NSDecimalNumberBehaviors?#>)
Он принимает NSDecimalNumberBehavior, который я не уверен, как манипулировать, поскольку он (1) не может быть инициирован в переменную и изменить его свойства, и (2) метод roundingMode() в соответствии с документацией не принимать любые параметры, но Xcode заполняет пространство параметров для "self".
Я полностью потерял это. Вернемся к основному вопросу; Как я могу объединить NSDecimalNumber в swift?
Заранее спасибо
Ответы
Ответ 1
вы можете сделать это так:
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
NSDecimalNumberBehaviors
является протоколом и поэтому не может быть создан. Вам нужен объект класса, соответствующего протоколу. Для этой цели Apple предоставляет класс NSDecimalNumberHandler
, например:
let handler = NSDecimalNumberHandler(roundingMode: NSRoundingMode.RoundBankers, scale: 0, raiseOnExactness: false, raiseOnOverflow: false, raiseOnUnderflow: false, raiseOnDivideByZero: false)
let rounded = dec.decimalNumberByRoundingAccordingToBehavior(handler)
Аргумент scale
- это количество десятичных знаков, которое вы хотите, т.е. 0
раундов для целого числа.
Ответ 3
// 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)