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

2

这似乎是Restkit的一个已知问题,并且仍然保留在 0.20

正如@blakewatters 的评论,服务器应该在字符串中返回浮点数,客户端仍然为对应字段声明 NSDecimalNumber,Restkit 将更正确地转换。

于 2013-06-19T07:29:35.327 回答