莫亚/阿拉莫火请求变量问题



我正在用Swift编写一个iOS 应用程序,并使用Moya作为网络层。

我正在制作一个请求对象以在正文中发送并使用 Moya 执行 API 调用:

struct OrderRequest{
var amount:Double
}
let order=OrderRequest(amount:100.57)

我正在将此对象转换为JSONDict,然后转换为数据。

if let json = JSONDict(from: order) {
let data = try JSONSerialization.data(withJSONObject: json, options: [])
}

我正在执行 Moya 请求,内部它正在使用 Alamofire。

问题:

它不是发送准确的值 100.57,而是发送100.56999999999999

我的问题是关于以下行的:

let jsonString = String(data: jsonData!, encoding: .utf8)

它将数据从 DATA 转换为 STRING。这是将 100.57 转换为 100.569999999999999

如何解决?我是否错误地制作了 DATA 对象?

这就是二进制浮点运算的工作原理。Double的精度约为15位,而Float的精度要低得多。问题不在于代码,而在于你的期望。这在C,C++,Objective-C,Java等中也是如此。同样在这里你可以找到同样的问题

最新更新