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 的值映射中失去了精度。
这对我来说是一件大事,因为我正在处理价格和货币。
我在这里明显遗漏了吗?不知道这种情况如何/为何发生以及该怎么办。
谢谢!
最佳答案
好像是a known issue Restkit的,仍然保持在0.20
正如@blakewatters的评论,服务器应该在字符串中返回 float ,客户端仍然为对应字段声明NSDecimalNumber,并且Restkit将更正确地转换。
关于objective-c - NSDecimalNumber RestKit精度错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14078208/