出於某種原因,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