小编joe*_*eth的帖子

在Swift中将Double转换为NSNumber会失去准确性

出于某种原因,我的Swift应用程序中的某些双打在转换为NSNumber时给我带来了麻烦,而有些则没有.我的应用程序需要将带有2位小数(价格)的双精度转换为NSNumbers,以便使用Core Data存储和检索它们.例如,除非使用NSNumber的doubleValue方法进行特殊格式化,否则一些特定的价格(例如79.99)将评估为99.98999999999999.

这里选择Warranty.price = 79.99,如调试器中所示

// item.price: NSNumber?       
// selectedWarranty.price: Double?  

item.price = NSNumber(double: selectedWarranty.price!)
Run Code Online (Sandbox Code Playgroud)

我编写了一些打印语句来说明转换是如何工作的

Original double: 79.99
Converted to NSNumber: 79.98999999999999
.doubleValue Representation: 79.99
Run Code Online (Sandbox Code Playgroud)

有人可以解释是否有一个原因,为什么初始化程序不能确保为每个数字保留2个小数位?我真的想将价格存储在核心数据中.每次显示时格式化都听起来不太方便.

更新:通过数据模型将核心数据对象转换为NSDecimalNumber类型,79.99和99.99不再是问题,但现在更易于管理的问题与不同的数字...

Original double: 39.99
Converted to NSDecimalNumber: 39.99000000000001024
Run Code Online (Sandbox Code Playgroud)

double nsnumber ios swift

10
推荐指数
1
解决办法
1万
查看次数

标签 统计

double ×1

ios ×1

nsnumber ×1

swift ×1