【问题标题】:Convert JSON data to Double in Swift在 Swift 中将 JSON 数据转换为 Double
【发布时间】:2017-01-23 14:01:21
【问题描述】:

我收到以下 JSON 响应:

{
  "id": 1,
  "value": 519.6365
}

但是当我将value 转换为Double 时,我得到:519.63649999999996

如何保持原值? (不四舍五入)

【问题讨论】:

标签: json swift double


【解决方案1】:

在这种情况下,使用 Foundation 的 NSNumber 会是更好的解决方案。 将 json 值转换为 NSNumber 并且它总是可以 downcastDouble Value

在 Swift 4 中 -

let json = [
    "id": 1,
    "value": 519.6365
]

let value = (json["value"]! as NSNumber).doubleValue
print(value)  // Outputs - 519.6365

如果服务器将值作为字符串发送,则需要首先将其转换为字符串,然后将值加倍为 -

value = (json["value"]! as NSString).doubleValue

【讨论】:

  • 不幸的是,您不能使用 NSNumberCodable 结构 (Swift 5) 自动将结构编码为 JSON,它只会显示错误:Type 'MyCodableStruct' does not conform to protocol 'Decodable'
【解决方案2】:

Double 就像 long Float,

Double 表示 64 位浮点数。

Float 表示一个 32 位浮点数。

因此,当您转换为 Double 时,会将 32 位添加到变量中,从而导致您看到的变化。

要保持数字不变,您需要将变量转换为 Float,表示较小的浮点数。

var value:Float = 519.6365
var valueDouble = Double(value) // 519.636474609375
Float(valueDouble) // 519.6365 

【讨论】:

  • valuevalueDouble 都保存519.636474609375 的值,它们只是以不同的精度打印。在上述问题中,没有任何地方将 Float 转换为 Double。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-23
  • 2015-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多