iOS double、float 轉 NSString的大坑


服務端給客戶端返回數據一般使用 JSON 字符串,iOS 端一般會將 JSON 轉成 Dictionary 使用。

這是一個簡單的 JSON 串:

{"progress":64.4} 

值得注意的是 JSON 串被轉換成 Dictionary 后會將基本數值類型轉換成__NSCFNumber類型(私有類,其父類為NSNumber)。我要取出 progerss 的值顯示在 label 上,可能這樣寫:

label.text = [dict[@"progress"] stringValue]; // 或者 label.text = [NSString stringWithFormat:@"%@", dict[@"progress"]]; 

結果label.text不是64.4而是64.40000000000001。可見NSNumber直接轉NSString會造成浮點數的精度丟失。

解決辦法:

double d = [dict[@"progress"] doubleValue]; NSString *dStr = [NSString stringWithFormat:@"%f", d]; NSDecimalNumber *dn = [NSDecimalNumber decimalNumberWithString:dStr]; label.text = [dn stringValue]; 

為什么不直接使用下面的方法?

double d = [dict[@"progress"] doubleValue]; label.text = [NSString stringWithFormat:@"%f", d]; 

答:因為這樣會保留小數點后面無意義的'0'.


免責聲明!

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



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