gpt4 book ai didi

JSON 从字符串到 float 的转换值

转载 作者:行者123 更新时间:2023-12-04 01:06:35 25 4
gpt4 key购买 nike

我有一个 Json(接收为文本),我将它转换成这样:

if let jsonData = raw.data(using: String.Encoding.utf8) {
if let json = try JSONSerialization.jsonObject(with: jsonData, options: .allowFragments) {
let products = json["products"] as! [Dictionary<String, AnyObject>]

Products 包含一个产品数组(也是 json),其中我有键,其值可以是 String、Float、Double...一个键有一个值,它可以是任何类型的数字。

当从端点接收文本时,该字段看起来像这样:\"min_size\":\"0.01\" 但也可以有类似 \"min_size\"的值:\"1\",或 \"min_size\":\"0.001\"。在我的 json 转换后看起来像这样(使用 po 打印):

▿ 1 : 2 elements
- key : "min_size"
- value : 1

或者

▿ 15 : 2 elements
- key : "min_size"
- value : 0.01

但是,当我尝试在我的代码中访问它时(我想将它作为 float 读取,独立地读取它是 1 还是 0.01),我得到了这个:

let k = item["min_size"] // contains > ▿ Optional<Any> - some : 0.01
let i = item["min_size"] as? Float // contains > nil
let j = item["min_size"] as? Int // contains > nil

let y = item["min_size"] as? NSString // contains > "0.01"
let z = y!.floatValue // contains > "0.009999997"

我是 Swift 的新手,我不明白这里发生了什么。

  • 为什么我不能直接将值(1 或 0.01)转换为 float ?
  • 如果不是,我该怎么做才能获得该字段的 float ?
  • 最重要的对我来说很奇怪...为什么要转换为“0.01”的 NSStringvalue 和 floatValue,结果不一样?舍入不是选项,因为它也可能是一个很长的小数。它可以是任何小数或整数。

知道我做错了什么吗?

最佳答案

根据评论中的建议,我实现的解决方案是:

let min_size = (item["min_size"] as? String ?? "").convertFromJSONStringToFloat()

我有两个字符串和 float 的扩展

extension String {
func convertFromJSONStringToFloat() -> Float? {
let partNumber = self.split(separator: ".")
return (Float(self)?.roundToDecimal((partNumber.count > 1) ? partNumber[1].count : 1))!
}
}

extension Float {
func roundToDecimal(_ fractionDigits: Int) -> Float {
let multiplier = pow(10, Double(fractionDigits))
return Float((Double(self) * multiplier) / multiplier)
}
}

关于JSON 从字符串到 float 的转换值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66274294/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com