當(dāng)后臺服務(wù)器返回數(shù)據(jù)為float/double類型時夕凝,OC接收會出現(xiàn).0000001精度丟失問題柠偶,經(jīng)查找資料有說是NSNumber的description方法不夠嚴(yán)謹(jǐn),調(diào)用時照成的精度丟失胎署。
解決辦法:
1吆录、讓服務(wù)器統(tǒng)一返回String類型數(shù)據(jù)
2、我們自行處理琼牧。當(dāng)服務(wù)器返回float/double類型時恢筝,利用NSDecimalNumber處理解決精度丟失問題
NSString *value = [NSString stringWithFormat:@"%lf", 服務(wù)器數(shù)據(jù).doubleValue];
NSDecimalNumber *decimalNumber = [[NSDecimalNumber alloc] initWithString:value];
NSLog(@"%@", decimalNumber.stringValue);
項目中我使用的是MJExtension模型轉(zhuǎn)換對象,找到?MJPropertyKey.m文件巨坊,修改valueInObject:方法:
- (id)valueInObject:(id)object
{
? ? if ([object isKindOfClass:[NSDictionary class]] && self.type == MJPropertyKeyTypeDictionary) {
? ??????id?value = object[self.name];
? ? ? ? if ([value isKindOfClass:[NSNumber class]] && [[value stringValue] containsString:@"."]) {
? ? ? ? ? ? value = [NSStringstringWithFormat:@"%lf", [object[self.name]doubleValue]];
? ? ? ? ? ? // NSDecimalNumber接收
? ? ? ? ? ? NSDecimalNumber*decimalNumber = [[NSDecimalNumber alloc] initWithString:value];
? ? ? ? ? ? return?decimalNumber.stringValue;
? ? ? ? }
? ? ? ? return?object[self.name];
? ? } else if ([object isKindOfClass:[NSArray class]] && self.type == MJPropertyKeyTypeArray) {
? ? ? ? NSArray *array = object;
? ? ? ? NSUInteger index = self.name.intValue;
? ? ? ? if (index < array.count) return array[index];
? ? ? ? return nil;
? ? }
? ? return nil;
}