Swift 中的 double/float 舍入(2 位数)

Round a double/float in Swift (2 digits)

我真的很困惑,因为我试图在 Swift 中四舍五入一个数字,如果我 运行 我在操场上的代码我的数字完美四舍五入,但如果我使用“参数”在 Alamofire 中发送它 我没有四舍五入的数字......对这个问题有什么想法吗?这些是我四舍五入的尝试:(

尝试 1

        var orderTotal = 0.0
        
        orderTotal = Double(total * 100).rounded()/100

   let parameters: [String: Any?] = [
            "Total": orderTotal
    ]

尝试 2

 let parameters: [String: Any?] = [
            "Total": total.rounded(digits: 2)
    ]

extension Double {
    func rounded(digits: Int) -> Double {
        let multiplier = pow(10.0, Double(digits))
        return (self * multiplier).rounded() / multiplier
    }
}

尝试 3

 let parameters: [String: Any?] = [
            "Total": Float(String(format:"%.2f", (total)))
    ]

 

PS。 "total" 是一个带 6-8 位小数的 Float 参数

双精度数和浮点数是二进制浮点数。它们不四舍五入为小数值;他们四舍五入为二进制值。如果您想要十进制值,请使用 Decimal.

这对我的人有用,特别感谢所有回答我的人:

var orderTotal = NSDecimalNumber(string: String(total))        
orderTotal = orderTotal.round(2)


extension NSDecimalNumber {
    public func round(_ decimals:Int) -> NSDecimalNumber {
        return self.rounding(accordingToBehavior: NSDecimalNumberHandler(roundingMode: .plain,
            scale: Int16(decimals),raiseOnExactness: false,
            raiseOnOverflow: false,raiseOnUnderflow: false,
            raiseOnDivideByZero: false))
    }
}