NSDecimalNumber RestKit精度错误

时间:2012-12-29 02:32:43

标签: objective-c restkit nsdecimalnumber

使用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的值映射中失去了精度。

这对我来说很重要,因为我正在处理价格和价格。货币。

我在这里错过了吗?没有看到如何/为什么会发生这种情况以及如何处理它。

谢谢!

1 个答案:

答案 0 :(得分:2)

似乎是Restkit的a known issue,仍然保持在0.20

作为@ blakewatters的注释,服务器应返回字符串中的浮点数,客户端仍然声明NSDecimalNumber为对应字段,并且Restkit将更正确地转换。