我在Swift中处理Decimal
类型的数字。我想在我的数字中使用rounding(accordingToBehavior:)
,为此我认为需要编写Decimal
的扩展来使用NSDecimalNumber
的方法。我不知道怎么做,因为我以前从未写过扩展。有什么想法吗?
最佳答案
你试过这样的东西吗。
let testingNSDecimalNumber: NSDecimalNumber = 8.765
let numberHandler = NSDecimalNumberHandler(roundingMode: .plain, scale: 2, raiseOnExactness: false, raiseOnOverflow: false, raiseOnUnderflow: false, raiseOnDivideByZero: false)
let roundedDecimalNumber = testingNSDecimalNumber.rounding(accordingToBehavior: numberHandler)
如果要创建
extension
的NSDecimalNumber
,则可以这样尝试。extension NSDecimalNumber {
func makeRoundingNumber(with scale: Int16) -> NSDecimalNumber {
let numberHandler = NSDecimalNumberHandler(roundingMode: .plain, scale: scale, raiseOnExactness: false, raiseOnOverflow: false, raiseOnUnderflow: false, raiseOnDivideByZero: false)
return self.rounding(accordingToBehavior: numberHandler)
}
}
现在这样调用这个扩展的方法。
let testingNSDecimalNumber: NSDecimalNumber = 8.765
print(testingNSDecimalNumber.makeRoundingNumber(with: 2))
编辑:对于您的评论
If var testingDecimalNumber: Decimal = 8.765 is a Decimal I cannot invoke .rounding(accordingToBehavior:)
您可以这样尝试。extension Decimal {
func makeRoundingNumber(with scale: Int16) -> NSDecimalNumber {
let numberHandler = NSDecimalNumberHandler(roundingMode: .plain, scale: scale, raiseOnExactness: false, raiseOnOverflow: false, raiseOnUnderflow: false, raiseOnDivideByZero: false)
return NSDecimalNumber(decimal: self).rounding(accordingToBehavior: numberHandler)
}
}
现在这样称呼它。
var testingDecimalNumber: Decimal = 8.765
print(testingDecimalNumber.makeRoundingNumber(with: 2))