避免陷入 double 轉(zhuǎn) NSString 的坑

服務(wù)端給客戶端返回數(shù)據(jù)一般使用 JSON 字符串,iOS 端一般會將 JSON 轉(zhuǎn)成 Dictionary 使用。于是坑就來了。

這是一個簡單的 JSON 串:

{"progress":64.4}

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

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

結(jié)果label.text不是64.4而是64.40000000000001??梢?code>NSNumber直接轉(zhuǎn)NSString會造成浮點數(shù)的精度丟失。

解決辦法:

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];

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容