我在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)

如果要创建extensionNSDecimalNumber,则可以这样尝试。
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))

07-27 17:53