3 回答

TA貢獻(xiàn)69條經(jīng)驗(yàn) 獲得超36個(gè)贊
其實(shí)這涉及到精度的問(wèn)題,容我慢慢道來(lái):
一般的小數(shù),比如1.5,2.5,0.5,在java里面,這些都默認(rèn)屬于double類型的數(shù)據(jù),我們都知道float類型是4字節(jié),也就是32位,double是8個(gè)字節(jié),也就是64位,所以我們一般在定義float函數(shù)的時(shí)候,比如:float a = 0.1; 是會(huì)報(bào)錯(cuò)的,因?yàn)檫@樣java虛擬機(jī)認(rèn)為會(huì)丟失精度(把一個(gè)64位的數(shù)據(jù),賦值給32位的數(shù)據(jù)),所以不能通過(guò)!必須加f 強(qiáng)制轉(zhuǎn)換為float類型;
再來(lái)看下你的第一個(gè)問(wèn)題:
????參數(shù)a 是float類型,然后參數(shù)b也是float類型,最后(a+b)/2 還是float類型。
????所以,把一個(gè)float類型 的數(shù)據(jù)賦值給一個(gè)float類型沒(méi)錯(cuò);
第二個(gè)問(wèn)題:
????a是整數(shù),b是整數(shù),c=a+b,所以c還是整數(shù),c/2,最后還是整數(shù),所以(94+81)=175,175/2=87.5,但是由于c/2是一個(gè)整數(shù),所以87.5會(huì)強(qiáng)制轉(zhuǎn)換為87,最后把一個(gè)整數(shù)87賦值給double類型,所以又變成87.0。
你可以再試一下,輸出一下c/2,就是87;
你也可以試一下,把c/2改成c/2.0 就會(huì)輸出87.5
????

TA貢獻(xiàn)69條經(jīng)驗(yàn) 獲得超36個(gè)贊
首先,參數(shù)a 是float類型,然后參數(shù)b也是float類型,最后(a+b)/2 還是float類型。
所以,把一個(gè)float類型 的數(shù)據(jù)賦值給一個(gè)float類型有錯(cuò)嗎?顯然沒(méi)有啊
添加回答
舉報(bào)