C++ 浮點(diǎn)數(shù)

2023-03-20 15:48 更新

上一章我們曾遇到處理非整型數(shù)的問題。我們使用百分?jǐn)?shù)代替小數(shù),避開了這個問題。然而還有一種更通用的解決方案,即使用浮點(diǎn)數(shù),可以同時表示小數(shù)和整數(shù)。C++有兩種浮點(diǎn)類型:float和double,本書僅使用double型。   

你可以創(chuàng)建浮點(diǎn)型變量并賦值,語法與使用其它數(shù)據(jù)類型一樣。例如:

double pi;
pi = 3.14159;

聲明變量同時賦值也是合法的:

int x = 1;
string empty = "";
double pi = 3.14159;

實際上這種語法形式很常用。聲明和賦值的組合語法有時也稱為初始化。 浮點(diǎn)數(shù)固然很有用,但也會帶來混淆,因為整型數(shù)和浮點(diǎn)數(shù)之間可能有意義重疊。例如,1這個值,是一個整型數(shù),還是一個浮點(diǎn)數(shù),抑或二者都是? 嚴(yán)格來說,C++區(qū)分整型的1和浮點(diǎn)型的1.0。盡管二者看似同一個數(shù),但屬于不同類型,嚴(yán)格意義上不允許類型間的賦值。下面語句是非法的:

int x = 1.1;

因為賦值運(yùn)算符左邊是整型變量,而右邊是浮點(diǎn)型值。但是由于C++具有自動轉(zhuǎn)換數(shù)據(jù)類型的特性,讓你很容易就忘掉了這一規(guī)則。例如:

double y = 1;

嚴(yán)格來講這也是非法的,但C++允許這么做,它會自動把int類型轉(zhuǎn)換為double類型。這種放寬的限制帶來便利的同時,也帶來了問題,如:

double y = 1 / 3;

你可能以為此表達(dá)式給變量y的值會是一個合法浮點(diǎn)數(shù)0.333333,但實際上y的值卻是0.0。原因是:賦值運(yùn)算符右邊的表達(dá)式實際上是兩個整型值之比,所以C++做的是整型除法,使得此值為0;再轉(zhuǎn)換為浮點(diǎn)數(shù),結(jié)果就是0.0。 解決這個問題(當(dāng)你發(fā)現(xiàn)問題是什么時)的一個方法是把右邊變成一個浮點(diǎn)數(shù)表達(dá)式:

double y = 1.0 / 3.0;

此式給y賦的值是0.333333,這才是期望結(jié)果。 到目前為止我們接觸到的所有運(yùn)算操作——加、減、乘、除——對浮點(diǎn)數(shù)都有效,然而其背后的運(yùn)行機(jī)制是完全不同的,你也許有興趣想了解這一點(diǎn)。實際上,大多數(shù)處理器有特定的硬件來執(zhí)行浮點(diǎn)數(shù)運(yùn)算。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號