ios - Moya/Alamofire 请求变量问题

标签 ios swift alamofire moya

我正在用 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.56999999999999

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

最佳答案

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

关于ios - Moya/Alamofire 请求变量问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59611460/

相关文章:

ios - SpriteKit 中多个不同的碰撞问题(使用 Xcode 使用 Objective-C 编写的 iOS 应用程序)

ios - 如何在标签文本之间包含 png 图像

ios - 如何使用 SearchBar API?

swift - 函数式 Swift 返回错误

ios - 当应用程序处于后台模式同时挂起模式时如何获取位置坐标

json - 使用 alamofire 将带有 JSON 对象和查询参数的 POST 请求发送到 REST web 服务

ios - 创建一个 Combine 的发布者,例如 RxSwift 的 Observable.Create 用于 Alamofire 请求

iphone - ios设备的发布和删除方法

arrays - 如何按键对 Dictionary 进行排序,其中值是 Swift 4 中的对象数组?

swift - 在 WatchOS 上与 Alamofire 联网