使用Swift3
並仍然陷入困境。我正在使用Decimal
類型,因爲它涉及到貨幣,我正在艱難地完成四捨五入的工作。我已閱讀NSDecimalNumberHandler
文檔和函數,但不太明白如何使其發揮作用。從本質上講,我只是希望當我構建的計算函數運行時,該類中的所有Decimal
類型都可以達到百分之一點。如何四捨五入十進制類型?
有人可以給我如何做到這一點的快速例子嗎?謝謝!
使用Swift3
並仍然陷入困境。我正在使用Decimal
類型,因爲它涉及到貨幣,我正在艱難地完成四捨五入的工作。我已閱讀NSDecimalNumberHandler
文檔和函數,但不太明白如何使其發揮作用。從本質上講,我只是希望當我構建的計算函數運行時,該類中的所有Decimal
類型都可以達到百分之一點。如何四捨五入十進制類型?
有人可以給我如何做到這一點的快速例子嗎?謝謝!
請檢查:
這是用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
您不應該將貨幣值保存爲十進制數。始終使用整數,像這樣:
1.00$ = 100
4567.89$ = 456789
然後當你想不存在它美分,你可以通過100
這看起來像它會返回一個字符串。我想要返回變量的值作爲十進制取整到百分之一位置(使用NSDecimalNumber.RoundingMode中的.plain取整樣式)。 – Grimes47
已更新答案。請檢查 –
Vini App,非常感謝。我使用了擴展方法,它工作。真的很感激它。我知道Decimal是一個結構體,而不是一個類,從我讀的它是在Swift 3中引入的。我喜歡Decimal,但希望我不必每次都使用NSDecimalNumber方法進行投射。 – Grimes47