- Objective-C和Sprite Kit游戲開發(fā)從入門到精通
- 曹化宇
- 1045字
- 2021-01-07 18:57:37
2.6 浮點(diǎn)數(shù)
除了整數(shù),代碼中使用的另一種基本數(shù)據(jù)類型就是浮點(diǎn)型,它用于處理包含小數(shù)部分的數(shù)據(jù)。在Objective-C中,常用的浮點(diǎn)數(shù)類型包括float和double,其中:
? float稱為單精度浮點(diǎn)數(shù),在NSLog()函數(shù)中的格式化字符為“%f ”,我們還可以使用特殊的格式顯示浮點(diǎn)數(shù),比如使用“%e”會(huì)以科學(xué)計(jì)數(shù)法顯示浮點(diǎn)數(shù)。
? double稱為雙精度浮點(diǎn)數(shù),其處理數(shù)據(jù)范圍更大,在NSLog()函數(shù)中的格式化字符為“%Lf ”。
此外,在Foundation框架(Core Graphics)中,定義了浮點(diǎn)數(shù)類型的別名,如CGFloat類型在64位平臺(tái)下定義為double類型的別名,而在32位環(huán)境下定義為float類型的別名。
開發(fā)過程中,可能經(jīng)常需要在整數(shù)和浮點(diǎn)數(shù)類型之間進(jìn)行轉(zhuǎn)換,接下來,我們就以int和double類型為例討論整數(shù)與浮點(diǎn)數(shù)之間的轉(zhuǎn)換問題。
首先,從整數(shù)類型到浮點(diǎn)數(shù)類型的轉(zhuǎn)換是沒有問題的,直接賦值就可以了,如下面的代碼。
int iNum = 100; double fNum = iNum;
代碼中,整數(shù)實(shí)際上是隱式轉(zhuǎn)換為浮點(diǎn)數(shù),因?yàn)閐ouble類型比int類型的取值范圍大,所以,這種隱式的轉(zhuǎn)換是沒有問題的。
反過來,當(dāng)我們需要將double類型轉(zhuǎn)換為int類型時(shí)就要注意:小數(shù)部分會(huì)丟失,這一點(diǎn)并不難理解,因?yàn)檎麛?shù)不能保存小數(shù)部分。如果下定決定這么做,可以使用強(qiáng)制轉(zhuǎn)換明確進(jìn)行轉(zhuǎn)換的決心,如下面的代碼。
double fNum = 100.56; int iNum = (int)fNum;
代碼中,我們在需要轉(zhuǎn)換的數(shù)據(jù)前使用了一對圓括號(hào),其中的數(shù)據(jù)類型就是轉(zhuǎn)換操作的目標(biāo)類型,這種數(shù)據(jù)類型轉(zhuǎn)換方式就稱為強(qiáng)制轉(zhuǎn)換。
浮點(diǎn)數(shù)進(jìn)行算術(shù)運(yùn)算時(shí),可以使用加法、減法、乘法和除法運(yùn)算符,而且,兩個(gè)浮點(diǎn)數(shù)運(yùn)算的結(jié)果依然是浮點(diǎn)數(shù)。在這些運(yùn)算中,如果混合有浮點(diǎn)數(shù)和整數(shù),會(huì)自動(dòng)將整數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)以后計(jì)算,計(jì)算結(jié)果同樣為浮點(diǎn)數(shù)。對于取余運(yùn)算,則會(huì)將浮點(diǎn)數(shù)自動(dòng)轉(zhuǎn)換為整數(shù)后計(jì)算,也就是說,在Objective-C中,浮點(diǎn)數(shù)不能進(jìn)行取余運(yùn)算。
下面的代碼演示了浮點(diǎn)數(shù)的算術(shù)運(yùn)算。
double x = 10.56 , y = 3.0; NSLog(@"x + y = %Lf", x + y); // 13.56 NSLog(@"x - y = %Lf", x - y); // 7.56 NSLog(@"x * y = %Lf", x * y); // 31.68 NSLog(@"x / y = %Lf", x / y); // 3.52 NSLog(@"x % y = %Lf", x % y); // 1
接下來的一個(gè)問題,我們應(yīng)該如何處理丟失的小數(shù)部分?
默認(rèn)情況下,浮點(diǎn)數(shù)在轉(zhuǎn)換成整數(shù)時(shí),會(huì)直接舍棄小數(shù)部分。不過,我們也可以自己做一點(diǎn)點(diǎn)決定,可以參考下面幾個(gè)函數(shù)處理浮點(diǎn)數(shù)。
? floorf()函數(shù),舍去參數(shù)中的小數(shù)部分,只返回整數(shù)部分,請注意,此函數(shù)的參數(shù)和返回結(jié)果都是float類型,如果需要整數(shù)類型,還是需要進(jìn)行轉(zhuǎn)換操作。如果操作double類型,則使用floor()函數(shù)。
? ceilf()函數(shù),舍去參數(shù)中的小數(shù)部分,整數(shù)部分加1,此函數(shù)的參數(shù)和返回值同樣為float類型;相應(yīng)的操作double類型的函數(shù)是ceil()。
最后放松一下,我們算一算月球的腰圍,即月球赤道的長度,如下面的代碼。
double r = 1738.0; double circumference = r * 2 * M_PI; NSLog(@"月亮半徑為%Lf km,其周長為%Lf km", r, circumference);
- Excel 2019公式與函數(shù)應(yīng)用大全(視頻教學(xué)版)
- Word/Excel/PPT 2013辦公應(yīng)用從入門到精通
- Excel 2010辦公應(yīng)用實(shí)戰(zhàn)從入門到精通(超值版)
- Office 2013入門與提高
- 零基礎(chǔ)學(xué)Python
- Project 2010企業(yè)項(xiàng)目管理實(shí)踐
- Word/Excel 2003辦公應(yīng)用實(shí)戰(zhàn)從入門到精通
- 中文PowerPoint 2003應(yīng)用基礎(chǔ)
- Excel 2019在統(tǒng)計(jì)分析工作中的典型應(yīng)用(視頻教學(xué)版)
- 游戲美術(shù)設(shè)計(jì)
- Office 2013從新手到高手
- Excel高效辦公:公司管理(修訂版)
- Office2010高級應(yīng)用教程
- 魔法數(shù)學(xué)(第1季)
- 辦公軟件高級應(yīng)用實(shí)驗(yàn)指導(dǎo)