Dim*_*sov 1 floating-point macos double swift4
基本上问题是在这个例子中:
let d1 = NSNumber(value: 1.4);
let d2 = d1.doubleValue;
let f1 = NSNumber(value: Float(1.4));
let f2 = d1.floatValue;
Run Code Online (Sandbox Code Playgroud)
d1 结果 1.4
d2 结果 1.3999999999999999
f1 结果 1.4
f2 结果 1.3999999999999998
有谁知道这是为什么?
我正在尝试解析 JSON 文件,例如:
{"name": "something", "version": 1.4}
Run Code Online (Sandbox Code Playgroud)
使用以下代码:
let json = try (JSONSerialization.jsonObject(with: someData) as? [String: Any])!;
let version: Double = (json["version"] as! NSNumber).doubleValue;
Run Code Online (Sandbox Code Playgroud)
或者
let version: Double = json["version"] as! Double;
Run Code Online (Sandbox Code Playgroud)
或者
let version: Double = json["version"] as! Float;
Run Code Online (Sandbox Code Playgroud)
我就是无法得到1.4 ...
四舍五入对我来说不是解决方案,因为我想将此数字写回 JSON 文件,该文件将被其他程序/语言解析,并且在文件中需要正好为 1.4。
有什么建议?
更新:问题仅 在于1.1和1.4。有没有问题 1.2, 1.3, 1.5
更新 2:序列化代码:
let d1 = NSNumber(value: 1.4);
let d2 = d1.doubleValue;
let f1 = NSNumber(value: Float(1.4));
let f2 = d1.floatValue;
Run Code Online (Sandbox Code Playgroud)
好的,只是为了结束讨论。
最后Decimal类型成功了。因此,我将所有变量引用更改为Decimal和NOT NSDecimalNumber,因为我收到了它不符合Codable和Decodable协议的错误。也许有一个解决方法,但最简单的解决方案就是坚持使用Decimal.
我要感谢@JamesBucanek 和@EricPostpischil 加入讨论并帮助解决这个问题!!!
| 归档时间: |
|
| 查看次数: |
2063 次 |
| 最近记录: |