有什么方法可以将 Double 转换为 NSNumber 并在 Swift 中将精度保持在至少 6 位小数?
Is there any way to convert from Double to NSNumber and maintain accuracy down to at least 6 decimal places in Swift?
我使用 Get
和 Set
将 Double
作为 NSNumber
存储到核心数据中。在这个转换过程中是这样的。
var number {
get {
return coreDataNumber.double
}
set {
coreDataNumber = NSNumber(double: newValue!)
}
}
如果语法错误,那与我的问题无关,我只是现在不在 Mac 上。我最终得出结论,保持转换准确性的唯一方法是使用 String 来存储 Double。我可以使用这种方法,但就我未来的知识而言,有没有办法防止像 0.003459 这样的数字在您检索时变成 0.0034589999999999999999?这不是我发现的唯一转换错误。有时它会在我不想要的时候变圆。我知道这可能与并非所有十进制值都可以用二进制正确表示有关。如果有一种方法可以在不损失准确性的情况下进行转换,我将不胜感激。
精度远高于6位小数。
使用您的号码:
0.003459 - 0.0034589999999999999999 = 1e-22
问题在于格式化功能(或缺少)。
我使用 Get
和 Set
将 Double
作为 NSNumber
存储到核心数据中。在这个转换过程中是这样的。
var number {
get {
return coreDataNumber.double
}
set {
coreDataNumber = NSNumber(double: newValue!)
}
}
如果语法错误,那与我的问题无关,我只是现在不在 Mac 上。我最终得出结论,保持转换准确性的唯一方法是使用 String 来存储 Double。我可以使用这种方法,但就我未来的知识而言,有没有办法防止像 0.003459 这样的数字在您检索时变成 0.0034589999999999999999?这不是我发现的唯一转换错误。有时它会在我不想要的时候变圆。我知道这可能与并非所有十进制值都可以用二进制正确表示有关。如果有一种方法可以在不损失准确性的情况下进行转换,我将不胜感激。
精度远高于6位小数。
使用您的号码:
0.003459 - 0.0034589999999999999999 = 1e-22
问题在于格式化功能(或缺少)。