我正在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等相同]