后台返回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;