W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
上一章我們?cè)龅教幚矸钦蛿?shù)的問題。我們使用百分?jǐn)?shù)代替小數(shù),避開了這個(gè)問題。然而還有一種更通用的解決方案,即使用浮點(diǎn)數(shù),可以同時(shí)表示小數(shù)和整數(shù)。C++有兩種浮點(diǎn)類型:float和double,本書僅使用double型。
你可以創(chuàng)建浮點(diǎn)型變量并賦值,語(yǔ)法與使用其它數(shù)據(jù)類型一樣。例如:
double pi;
pi = 3.14159;
聲明變量同時(shí)賦值也是合法的:
int x = 1;
string empty = "";
double pi = 3.14159;
實(shí)際上這種語(yǔ)法形式很常用。聲明和賦值的組合語(yǔ)法有時(shí)也稱為初始化。 浮點(diǎn)數(shù)固然很有用,但也會(huì)帶來混淆,因?yàn)檎蛿?shù)和浮點(diǎn)數(shù)之間可能有意義重疊。例如,1這個(gè)值,是一個(gè)整型數(shù),還是一個(gè)浮點(diǎn)數(shù),抑或二者都是? 嚴(yán)格來說,C++區(qū)分整型的1和浮點(diǎn)型的1.0。盡管二者看似同一個(gè)數(shù),但屬于不同類型,嚴(yán)格意義上不允許類型間的賦值。下面語(yǔ)句是非法的:
int x = 1.1;
因?yàn)橘x值運(yùn)算符左邊是整型變量,而右邊是浮點(diǎn)型值。但是由于C++具有自動(dòng)轉(zhuǎn)換數(shù)據(jù)類型的特性,讓你很容易就忘掉了這一規(guī)則。例如:
double y = 1;
嚴(yán)格來講這也是非法的,但C++允許這么做,它會(huì)自動(dòng)把int類型轉(zhuǎn)換為double類型。這種放寬的限制帶來便利的同時(shí),也帶來了問題,如:
double y = 1 / 3;
你可能以為此表達(dá)式給變量y的值會(huì)是一個(gè)合法浮點(diǎn)數(shù)0.333333,但實(shí)際上y的值卻是0.0。原因是:賦值運(yùn)算符右邊的表達(dá)式實(shí)際上是兩個(gè)整型值之比,所以C++做的是整型除法,使得此值為0;再轉(zhuǎn)換為浮點(diǎn)數(shù),結(jié)果就是0.0。 解決這個(gè)問題(當(dāng)你發(fā)現(xiàn)問題是什么時(shí))的一個(gè)方法是把右邊變成一個(gè)浮點(diǎn)數(shù)表達(dá)式:
double y = 1.0 / 3.0;
此式給y賦的值是0.333333,這才是期望結(jié)果。 到目前為止我們接觸到的所有運(yùn)算操作——加、減、乘、除——對(duì)浮點(diǎn)數(shù)都有效,然而其背后的運(yùn)行機(jī)制是完全不同的,你也許有興趣想了解這一點(diǎn)。實(shí)際上,大多數(shù)處理器有特定的硬件來執(zhí)行浮點(diǎn)數(shù)運(yùn)算。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: