計算值時為Nan inf

2021-10-05 12:53:04 字數 1344 閱讀 9572

inf和nan含義如下:

inf表示「無窮大」,是infinite的縮寫。nan表示「無效數字」,是not a number的縮寫。

2.inf是不會崩潰的,但nan是會崩潰的

本人出現的情況:

仔細研究後發現,原來是我獲取的 uiimage 物件 等於 nil 了,以至於 image.size.height 值 和 image.size.width 的值,都拿不到了;

那麼image的寬高比 計算出來的 imageview 的 imageheight 的值也就 成 nan 了。

//部分**

[cell.photo sd_setimagewithurl:[nsurl urlwithstring:ad.imageurl] placeholderimage:[uiimage imagenamed:@"defaultimage"] completed:^(uiimage *image, nserror *error, emsdimagecachetype cachetype, nsurl *imageurl)

inf一般是因為得到的數值,超出浮點數的表示範圍(溢位,即階碼部分超過其能表示的最大值);

而nan一般是因為對浮點數進行了未定義的操作,如對-1開方。

除以0sizewithfont的字串為nil

數學函式不正確運算

1.0/0.0等於inf,-1.0/0.0等於-inf,0.0+inf=inf;對負數開方sqrt(-1.0)、對負數求對數(log(-1.0))、0.0/0.0、0.0*inf、inf/inf、inf-inf這些操作都會得到nan。(0/0會產生操作異常;0.0/0.0不會產生操作異常,而是會得到nan)

找到呼叫引數nan或者inf 的語句加入邏輯判斷(運用math類裡的isnan):

if (!isnan(cgrectgetmidx(newframe))) 就是當cgrectgetmidx不為無效引數呼叫此句.這樣就可以解決崩潰了

2.( 得到inf時就檢視是否有溢位或者除以0,得到nan時就檢視是否有非法操作。)

nan==nan 結果是0或false,即不能和nan進行比較,和nan進行比較得到的結果總是false或0。所以可以用函式: int isnumber(double d)來判斷d是否為nan,若d是nan則返回0,否則返回非零值

float ecg;  

if(isnan(ecg))

else

//inf同理

if (isinf(height))

json屬性值為null時轉換

解決思路 將屬性值 null 轉換成 解決方法如下 1.經過搜尋可以用下面的方法 gson gson new gsonbuilder serializenulls create 但是這個卻無法解決反序列問題,怎麼解決呢?我在stackoverflow上找到了這個問題,親測有效 2.解決辦法如下 gs...

物件key值為數字時的處理

先說解決辦法 通過a key 的方式獲取。具體場景是這樣的 有乙個物件的key是數字組成的,這時候使用a.b的形式就不能獲取到相應的value值,如下圖 a.111 會報錯。特別說明 a 111 和a 111 兩種寫法都是一樣的,沒有什麼區別,此用法與陣列用下標訪問是相同的。請注意,如果使用方括號運...

PathVariable為空時指定預設值的操作

pathvariable為空時指定預設值,可以指定多個匹配路徑,然後設定引數非必要的,就可以了,例子如下 requestmapping value timeline public modelandview gettimeline pathvariable value uid string artic...