使用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]];
} ....
“value”的类型为NSCFNumber,我似乎在从NSCFNumber到NSDecimalNumber的值映射中失去了精度。
这对我来说很重要,因为我正在处理价格和价格。货币。
我在这里错过了吗?没有看到如何/为什么会发生这种情况以及如何处理它。
谢谢!
答案 0 :(得分:2)
似乎是Restkit的a known issue,仍然保持在0.20
作为@ blakewatters的注释,服务器应返回字符串中的浮点数,客户端仍然声明NSDecimalNumber为对应字段,并且Restkit将更正确地转换。