2012-12-29 2 views
2

Très étrange erreur de précision NSDecimalNumber (ou peut-être une erreur de l'opérateur que je ne vois pas) avec RestKit v 0.10.2NSDecimalNumber RestKit erreur de précision

définition de classe:

.... 
@property (nonatomic, assign) NSInteger menuItemId; 
@property (nonatomic, strong) NSString *menuItemTitle; 
@property (nonatomic, strong) NSString *menuItemDescription; 
@property (nonatomic, strong) NSDecimalNumber *menuItemPrice; 
.... 

texte JSON:

{"MenuItemId":5, 
"MenuItemTitle":"Grilled Jumbo Shrimp Penne Pasta", 
"MenuItemDescription":"spinach, mushrooms, garlic, sour cream, sun-dried tomatoes", 
"MenuItemBasePrice":9.9500} 

mapping objet est anodin:

[objectMapping mapKeyPath:@"MenuItemId" toAttribute:@"menuItemId"]; 
[objectMapping mapKeyPath:@"MenuItemTitle" toAttribute:@"menuItemTitle"]; 
[objectMapping mapKeyPath:@"MenuItemDescription" toAttribute:@"menuItemDescription"]; 
[objectMapping mapKeyPath:@"MenuItemBasePrice" toAttribute:@"menuItemPrice"]; 

Pourtant, les résultats désérialisation en valeur menuItemPrice = 9,9499999999

Il semble que l'erreur/problème peut être de remonter à ces lignes RKObjectMappingOperation dans la méthode

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

La « valeur » est de type NSCFNumber, et je comparais perdre la précision dans le mappage des valeurs de NSCFNumber à NSDecimalNumber.

Ceci est une grosse affaire pour moi car je traite avec des prix & devise.

Est-ce que je suis manquant ici? Ne pas voir comment/pourquoi cela arrive et quoi faire à ce sujet.

Merci!

Répondre

2

Il semble être a known issue de Restkit, et reste encore à 0,20

Comme @ commentaire de blakewatters, serveur devrait retourner nombre à virgule flottante dans une chaîne, le client déclare encore NSDecimalNumber pour le champ correspondant, et Restkit convertira plus correctement .