2

RestKit v 0.10.2 での非常に奇妙な NSDecimalNumber 精度エラー (または、おそらく私が見ていないオペレーター エラー)

クラス定義:

....
@property (nonatomic, assign) NSInteger menuItemId;
@property (nonatomic, strong) NSString *menuItemTitle;
@property (nonatomic, strong) NSString *menuItemDescription;
@property (nonatomic, strong) NSDecimalNumber *menuItemPrice;
....

JSON テキスト:

{"MenuItemId":5,
 "MenuItemTitle":"Grilled Jumbo Shrimp Penne Pasta",
 "MenuItemDescription":"spinach, mushrooms, garlic, sour cream, sun-dried tomatoes",
 "MenuItemBasePrice":9.9500}

オブジェクト マッピングは目立たない:

 [objectMapping mapKeyPath:@"MenuItemId" toAttribute:@"menuItemId"];
 [objectMapping mapKeyPath:@"MenuItemTitle" toAttribute:@"menuItemTitle"];
 [objectMapping mapKeyPath:@"MenuItemDescription" toAttribute:@"menuItemDescription"];
 [objectMapping mapKeyPath:@"MenuItemBasePrice" toAttribute:@"menuItemPrice"];

ただし、逆シリアル化の結果は menuItemPrice 値 = 9.9499999999 になります

エラー/問題は、メソッドの RKObjectMappingOperation のこれらの行にまでさかのぼることができるようです

- (id)transformValue:(id)value atKeyPath:(NSString *)keyPath toType:(Class)destinationType

....
} else if ([sourceType isSubclassOfClass:[NSNumber class]] && [destinationType isSubclassOfClass:[NSDecimalNumber class]]) {
    // Number -> Decimal Number
    return [NSDecimalNumber decimalNumberWithDecimal:[value decimalValue]];
} ....

「値」は NSCFNumber 型であり、NSCFNumber から NSDecimalNumber への値のマッピングで精度が失われているようです。

私は価格と通貨を扱っているので、これは私にとって大きな問題です。

ここで明らかなことがありませんか?これがどのように/なぜ起こるのか、それに対して何をすべきかがわかりません。

ありがとう!

4

1 に答える 1