Moya/Alamofire 请求变量问题

Posted

技术标签:

【中文标题】Moya/Alamofire 请求变量问题【英文标题】:Moya/Alamofire request variables issue 【发布时间】:2020-01-06 11:38:50 【问题描述】:

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

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

struct OrderRequest
var amount:Double


let order=OrderRequest(amount:100.57)

我正在将此对象转换为 JSONDict,然后再转换为 Data。

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

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

问题:

它发送100.56999999999999

,而不是发送100.57的准确值

我的问题是关于以下行:

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

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

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于Moya/Alamofire 请求变量问题的主要内容,如果未能解决你的问题,请参考以下文章

Moya/Alamofire - 具有相同键的 URL 编码参数

为啥我可以从 main 方法访问私有变量?

ISO 3166-1α-2 CSV

这个块在 Swift - Alamofire 中是啥意思?

如何触发电池百分比更改的事件?

如何在 GET 请求之外使用变量?