我在 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)
如果你想创建 NSDecimalNumber
的 extension
那么你可以这样尝试。
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))
编辑:对于您的评论 如果 var testingDecimalNumber: Decimal = 8.765 是 Decimal 我无法调用 .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))
关于swift - 扩展 Decimal 以使用舍入(根据 ToBehavior :),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41300762/