iOS開發(fā)可能遇到的坑(一)——浮點數(shù)的轉化顯示問題

之前在學習C語言的時候課堂上,老師就強調(diào),不能使用float類型的數(shù)字進行相等比較判斷。這個也確實聽進去了,也明白原因是float是存儲是不精確的。但是真正開發(fā)實踐的時候,或許只有出問題了,才會醒悟:哦,原來是這樣。這個問題在高大上的OC上同樣存在,稍不注意就會出現(xiàn)問題。

iOS開發(fā)中,接受后臺的響應,然后轉化為模型對象,最終轉化為NSString對象,然后控件顯示出來。這一切都是那么的自然那么的熟悉。
一個數(shù)字,可以定義為number類型,也可以定義為字符串問題。如果后臺返回的是字符串類型。在iOS json序列化的時候,會把字符串類型轉化為NSString對象,這個一點問題沒有。但是如果后臺返回的是number類型。json序列化會將number類型轉化為NSNumber對象。使用的時候,想當然的會將NSNumber轉化為NSString對象。這樣做很自然啊,沒有問題,也用一兩個數(shù)字測試了,轉化是精確的。測試那邊也測試通過了,然后產(chǎn)品上線了。最終,還是出現(xiàn)了問題。不說大數(shù),就10以內(nèi)的吧。有這么多的轉換不精確。(如下圖)不信你可以試一下,讓后臺定義double類型數(shù)據(jù)66.6,你轉化為字符串會發(fā)現(xiàn)就是66.59999999999999。測試發(fā)現(xiàn)double轉化為NSNumber的時候就會出現(xiàn)問題。double表示的字面值和其存儲的值一般是不一樣的,轉化為NSNumber之后,有很大一些數(shù)字,在NSNumber的stringValue上會出錯。

  NSString* json = @"{\"number\":66.6}";
  NSData* data = [json dataUsingEncoding:NSUTF8StringEncoding];
  NSDictionary* dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
  id object = dic[@"number"];
  NSLog(@"%@",[object class]);
  NSLog(@"%@",object);

打印結果

 __NSCFNumber
 66.59999999999999
示例

解決方法可以是把取String的doubleValue,然后再.2f保留兩位小數(shù)進行構造字符串。千萬不能取floatValue,floatValue在大于15萬的浮點數(shù)字就會出現(xiàn)不精確了(筆者做過遍歷測試)。而doubleValue在數(shù)十億的范圍內(nèi)都是字面上精確的。
根本解決方法還是勸后臺的同事把請求返回的數(shù)據(jù)全部設置為String類型
如果涉及到計算的問題,那就只得乖乖轉化為NSDecimalNumber對象了。

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

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

  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學一百閱讀 3,663評論 0 4
  • ios開發(fā)中,在接收后臺數(shù)據(jù)的時候會先轉換為對象,最后轉化為我們想要的數(shù)據(jù)類型. 那么數(shù)字是怎么樣的一個過程呢??...
    香橙柚子閱讀 3,627評論 1 2
  • 蘆葦蕩輕舟,浪花驚海鷗。 烤魚蝦,柳葉水邊。 仙鶴歡歌千飛逸,憶難卻,醉思鄉(xiāng)。 魂渡又萬里,幾封故舊書。 念村莊,...
    雨意生香閱讀 552評論 9 11
  • 第二天周六,早上7點,陸慕言起床,洗漱,換了一條黑色休閑西褲,露出腳踝,搭配白色襯衫和白色板鞋,收拾完房間,拿起床...
    莫穴閱讀 384評論 0 2
  • 遐邇一體的意思是無論是邊遠地區(qū)的異族,還是內(nèi)地的人民,都能夠緊密團結,融為一體。 遐指的是遠方,邇指的是附近,我們...
    曹斐閱讀 1,172評論 0 4

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