json 解析double類型多出幾位小數,利用NSDecimalNumber修復 , 服務器返回的數據,用數據類型接收(int,NSNumber)?


 后台返回float類型數據8.2,實際用AFN的json解析后得到8.1999999999,該怎么處理呢?

 

開發中處理處理價格金額問題, 后台經常返回float、double類型, 打印或轉成NSString都會有精度丟失問題, 因此使用系統自帶的NSDecimalNumber做處理, 能解決這問題:

處理精度有關的數據先把數據轉成double類型 

此處我是以string方式接收的,直接添加NSString的分類,修正方法貼出來如下:

+(NSString )reviseString:(NSString )string{
/* 直接傳入精度丟失有問題的Double類型*/
double conversionValue        = (double)[string floatValue];
NSString *doubleString        = [NSString stringWithFormat:@"%lf", conversionValue];
NSDecimalNumber *decNumber    = [NSDecimalNumber decimalNumberWithString:doubleString];
return [decNumber stringValue];
}
這樣返回的就是修正過精度的數據了,因為個人需要所以轉成了string類型

  服務器返回的數據,用數據類型接收(int,NSNumber)?

NSNumber

字典轉模型時,關於數字的賦值的問題和解決辦法.

定義模型類時,當要保存字符串時,使用 NSString.

// 當 messageId 為字符串的時候,使用 NSString 接收
@property (nonatomic,copy) NSString *messageId;
問題

定義模型類時,當要保存數字時,使用 int.
注意 : int類型的變量,不能賦值為nil(空對象)或者null(空值),若強行賦值會崩潰.
// 問題 : 字典轉模型時,當給 int類型的 messageId 賦空值時就會崩潰.
@property (nonatomic,assign) int messageId;
解決

保存數字除了 int 以外 還有 NSNumber.
NSNumber 既能保存空值,又能保存數字.
// 解決 : 使用 NSNumber 既能保存空值,又能保存數字
@property (nonatomic,strong) NSNumber *messageId;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM