iOS開發(fā)填坑-double的轉(zhuǎn)化顯示有誤

ios開發(fā)中,在接收后臺數(shù)據(jù)的時候會先轉(zhuǎn)換為對象,最后轉(zhuǎn)化為我們想要的數(shù)據(jù)類型.

那么數(shù)字是怎么樣的一個過程呢??
后臺傳給我們一個數(shù)字,后臺可以定義為 Number類型,也可以定義成 String類型.當(dāng)后臺返回來一個NSString類型,在iOS json序列化的時候,會把字符串類型轉(zhuǎn)化為NSString對象.當(dāng)后臺傳給我們的是number類型,我們拿到j(luò)son數(shù)據(jù)后,會把數(shù)據(jù)轉(zhuǎn)化成NSNumber對象類型,使用的時候會把NSNumber轉(zhuǎn)化為我們想要的類型.

但是接收數(shù)據(jù)的時候,我們需要把number轉(zhuǎn)化為NSString類型,會出現(xiàn)轉(zhuǎn)化不準(zhǔn)確的現(xiàn)象,比如后臺定義了一個82.4,我們接收到數(shù)據(jù),并轉(zhuǎn)化為NSString類型,結(jié)果會顯示出82.39999999999999999.試過幾次后發(fā)現(xiàn)是double轉(zhuǎn)化為NSNumber的時候除了問題.double表示的字面值和其存儲的值一般是不一樣的,轉(zhuǎn)化為NSNumber之后,有很大一些數(shù)字,在NSNumber的stringValue上會出錯。

解決方法:可以是取StringdoubleValue,然后再.2f保留兩位小數(shù)進(jìn)行構(gòu)造字符串。千萬不能取floatValue,floatValue在大于15萬的浮點(diǎn)數(shù)字就會出現(xiàn)不精確了 。而doubleValue在數(shù)十億的范圍內(nèi)都是字面上精確的。

根本解決方法還是讓后臺的同事把請求返回的數(shù)據(jù)全部設(shè)置為String類型
如果涉及到計(jì)算的問題,那就只得乖乖轉(zhuǎn)化為NSDecimalNumber對象了。

在開發(fā)中,關(guān)于價(jià)格金額的計(jì)算往往是比較嚴(yán)格的,試想一下,支付寶每次轉(zhuǎn)錢的時候,少轉(zhuǎn)了1分錢,你會開心嗎?
在顯示金額的時候,最后這些數(shù)據(jù)都由后臺確定,移動端直接顯示,不要進(jìn)行轉(zhuǎn)換.如果必要的時候,真的需要進(jìn)行計(jì)算,請使用NSDecimalNumber來進(jìn)行計(jì)算,這是這是一個高精度的類,專門用于計(jì)算金額.

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

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

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