私のSwiftアプリケーションでは、何らかの理由でNSNumberに変換するときに問題が発生することがあります。私のアプリは2桁の小数点以下の桁数(価格)をNSNumbersに変換してコアデータを使用して格納および検索できるようにする必要があります。たとえば、NSNumberのdoubleValueメソッドを使用して特別にフォーマットされていない限り、79.99などの特定の価格は99.98999999999999と評価されます。ここでSwiftでNSNumberに変換する精度が
selectedWarranty.price = 79.99、私は理由がある場合、誰かが説明することができ、変換が
Original double: 79.99
Converted to NSNumber: 79.98999999999999
.doubleValue Representation: 79.99
をどのように動作するかを示すために、いくつかのprint文をプログラムデバッガ
// item.price: NSNumber?
// selectedWarranty.price: Double?
item.price = NSNumber(double: selectedWarranty.price!)
に示すように、イニシャライザは確実にすべての数値に対して小数点以下2桁を保持できませんか?コアデータに価格を保管するのが本当に好きです。それが表示されるたびにフォーマットするのはとても便利ではありません。
UPDATE:データモデルを通じてNSDecimalNumberを入力する 変換されたコアデータオブジェクト、79.99と99.99もはや問題ではなく、異なる数と今より管理の問題...まず
Original double: 39.99
Converted to NSDecimalNumber: 39.99000000000001024
[最小限の、完全で検証可能な例を作成してください](http://stackoverflow.com/help/mcve) – Alexander
通貨に「NSNumber」の代わりに「NSDecimalNumber」を使用します。 – rmaddy
この問題は再現できません。 http://swiftlang.ng.bluemix.net/#/repl/57bdc2590dcf4abf47da28c2 – Alexander