使用Swift3
仍然可以解决问题。我正在使用Decimal
类型,因为它涉及货币,而我正在艰难地完成四舍五入的工作。我已经阅读了NSDecimalNumberHandler
文档和rounding
函数,但不太了解如何使其工作。基本上我只希望这个类中的所有Decimal
类型在我构建的计算函数运行时舍入到百分之一点。
有人可以给我一个如何做到这一点的快速示例吗?谢谢!
答案 0 :(得分:0)
您永远不应将货币值保存为十进制数。总是使用整数,如下所示:
1.00$ = 100
4567.89$ = 456789
然后当你想要以美分呈现时,你可以除以100。
答案 1 :(得分:0)
请检查:
这是使用NSDecimalNumber& NSDecimalNumberHandler:
let decimalStr = NSDecimalNumber(string: "500.2595")
let decimalStrHandler = NSDecimalNumberHandler(roundingMode: .plain, scale: 3, raiseOnExactness: false, raiseOnOverflow: false, raiseOnUnderflow: false, raiseOnDivideByZero: false)
let roundedVal = decimalStr.rounding(accordingToBehavior: decimalStrHandler)
print(roundedVal) // prints 500.26
这是使用NumberFormatter&十进制:
extension Decimal {
func roundDecimal() -> String {
let formatter = NumberFormatter()
formatter.minimumFractionDigits = 2
return formatter.string(from: self as NSDecimalNumber)!
}
}
你必须像下面这样打电话:
let decimalStr = Decimal(string: "500.2595")!
print(decimalStr.roundDecimal()) // prints 500.26
let decimalFloat = Decimal(floatLiteral: 500.2595)
print(decimalFloat.roundDecimal()) // prints 500.26
答案 2 :(得分:-1)
有一个名为NSDecimalRound
的特定功能可用于此目的。这是Decimal
的扩展,可用于获取标准的round
和rounded
函数:
extension Decimal {
mutating func round(_ scale: Int, _ roundingMode: NSDecimalNumber.RoundingMode) {
var localCopy = self
NSDecimalRound(&self, &localCopy, scale, roundingMode)
}
func rounded(_ scale: Int, _ roundingMode: NSDecimalNumber.RoundingMode) -> Decimal {
var result = Decimal()
var localCopy = self
NSDecimalRound(&result, &localCopy, scale, roundingMode)
return result
}
}