首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Swift中对双精度/浮点数进行舍入(2位)

在Swift中对双精度/浮点数进行舍入(2位)
EN

Stack Overflow用户
提问于 2021-01-29 02:45:26
回答 2查看 89关注 0票数 0

我真的很困惑,因为我试图在Swift中舍入一个数字,如果我在操场上运行我的代码,我的数字会被完美地舍入,但如果我在Alamofire中使用“参数”发送它,我的数字就不会舍入……你对这个问题有什么想法吗?以下是我对数字进行舍入的尝试:

尝试1

代码语言:javascript
运行
复制
        var orderTotal = 0.0
        
        orderTotal = Double(total * 100).rounded()/100

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

尝试2

代码语言:javascript
运行
复制
 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

代码语言:javascript
运行
复制
 let parameters: [String: Any?] = [
            "Total": Float(String(format:"%.2f", (total)))
    ]

PS。"total“为浮点型参数,小数为6-8位

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-29 02:54:50

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

票数 2
EN

Stack Overflow用户

发布于 2021-01-29 03:59:50

这对我的人很有效,特别感谢所有回复我的人:

代码语言:javascript
运行
复制
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))
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65943363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档