objective-c - NSDecimalNumber RestKit精度错误

标签 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]];
} ....

“值”的类型为 NSCFNumber,我似乎在从 NSCFNumber 到 NSDecimalNumber 的值映射中失去了精度。

这对我来说是一件大事,因为我正在处理价格和货币。

我在这里明显遗漏了吗?不知道这种情况如何/为何发生以及该怎么办。

谢谢!

最佳答案

好像是a known issue Restkit的,仍然保持在0.20

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

关于objective-c - NSDecimalNumber RestKit精度错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14078208/

相关文章:

ios - 当主线程针对另一个调度队列发出 dispatch_sync 时,主队列/主线程会发生什么?

swift - 为什么减去 NSDecimalNumbers 不起作用 - Swift 3

iphone - iOS 4 中 iAd 的示例代码

ios - RestKit 和 Cocoapods : Mapping operation failed/did not find any mappable values

ios - Restkit 0.20 嵌套对象数组映射问题

ios - RestKit 和 AFNetworking 构建错误

ios - NSRoundBankers 没有按照 Apple 的记录工作

objective-c - 如何更改 Sprite 的 Z 顺序?

objective-c - Objective-C 中的 Unix 系统调用