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