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 への値のマッピングで精度が失われているようです。
私は価格と通貨を扱っているので、これは私にとって大きな問題です。
ここで明らかなことがありませんか?これがどのように/なぜ起こるのか、それに対して何をすべきかがわかりません。
ありがとう!