出于某种原因,Swift应用程序中的某些双精度转换为NSNumber时会给我带来麻烦,而有些则不会。我的应用程序需要将2位小数(价格)的双打转换为NSNumbers,以便可以使用核心数据进行存储和检索。例如,除非使用NSNumber的doubleValue方法专门格式化,否则一些特定的价格(如79.99)将评估为99.98999999999999。在Swift中将Double转换为NSNumber失去准确性
这里selectedWarranty.price如图调试
// item.price: NSNumber?
// selectedWarranty.price: Double?
item.price = NSNumber(double: selectedWarranty.price!)
我编程一些打印语句来说明如何转换工作出
Original double: 79.99
Converted to NSNumber: 79.98999999999999
.doubleValue Representation: 79.99
有人能解释一下,如果是有原因的79.99 =为什么初始值设定程序不能确保每个数字保留2位小数位?我真的很想将价格存储在核心数据中,就像他们应该那样。每次显示格式时听起来都不太方便。
UPDATE: 转换核心数据对象通过数据模型输入NSDecimalNumber,79.99和99.99不再是一个问题,但有不同的数字,现在更容易管理的问题...
Original double: 39.99
Converted to NSDecimalNumber: 39.99000000000001024
你可以请一个[最小的,完整的和可验证的例子](http://stackoverflow.com/help/mcve)? – Alexander
货币使用'NSDecimalNumber'而不是'NSNumber'。 – rmaddy
我无法重现此问题。 http://swiftlang.ng.bluemix.net/#/repl/57bdc2590dcf4abf47da28c2 – Alexander