官术网_书友最值得收藏!

2.2 數(shù)字類型聲明及基本運(yùn)算

Python語言提供了整型、浮點(diǎn)型、復(fù)數(shù)類型3種數(shù)字類型??梢酝ㄋ椎乩斫鉃?,整型是不帶小數(shù)點(diǎn)的整數(shù),而浮點(diǎn)型是帶小數(shù)點(diǎn)的小數(shù)。

2.2.1 整型

整型共有4種進(jìn)制表示:十進(jìn)制、二進(jìn)制、八進(jìn)制、十六進(jìn)制。

(1)十進(jìn)制整數(shù)。為默認(rèn)情況,由0~9的數(shù)字組成,如12、23。

(2)二進(jìn)制整數(shù)。由0和1組成。在Python中表示該數(shù)為二進(jìn)制時(shí)需要在數(shù)字前面加0b或0B,如0b0、0b10等。

(3)八進(jìn)制整數(shù)。由 0~7 的數(shù)字組成。在 Python 中表示該數(shù)為八進(jìn)制時(shí)需要在數(shù)字前面加 0o 或 0O(第 1 個(gè)是數(shù)字 0,第 2 個(gè)是字母 o,大寫或小寫均可。以下均相同),如0o1、0O11等。

(4)十六進(jìn)制整數(shù)。由0~9 的數(shù)字、a~f 的字母組成。在Python 中表示該數(shù)為十六進(jìn)制時(shí)需要在數(shù)字前面加0x或0X,如0xbb、0x3d等。

在Python中的整型數(shù)據(jù)的精度并不像其他編程語言一樣有一個(gè)明確的范圍限制,從理論上來講,它能存儲(chǔ)多大的整型數(shù)據(jù)是由硬件結(jié)構(gòu)來決定的,即由內(nèi)存大小或者 CPU的運(yùn)算范圍來決定整數(shù)的范圍。

因此,我們可以處理非常非常大的數(shù)字,這在其他的編程語言是無法想象的。這也是Python具有的一個(gè)特性。

2.2.2 浮點(diǎn)型

Python中的浮點(diǎn)型有2種表示形式:十進(jìn)制表示和科學(xué)計(jì)數(shù)法表示。十進(jìn)制表示法與數(shù)學(xué)中的實(shí)數(shù)表示法一致。如.1、1.1、0.1、1.0等都是合法的表示方法。1.1×10-2的科學(xué)計(jì)數(shù)法為1.1e-2或1.1E-2,e或E表示以10為底,后跟10的冪次方,其值為0.011。

2.2.3 復(fù)數(shù)類型

Python 中的復(fù)數(shù)類型表示數(shù)學(xué)中的復(fù)數(shù)。復(fù)數(shù)分為實(shí)部和虛部,其中,虛部通過 j或J來表示,如12.5+5j或12.5+5J。復(fù)數(shù)的實(shí)部和虛部都是浮點(diǎn)型。

對(duì)于復(fù)數(shù)z,可以用z.real和z.imag來分別獲得它的實(shí)數(shù)部分和虛數(shù)部分。例如:

2.2.4 數(shù)字運(yùn)算符

變量被賦值為數(shù)字類型后,可以進(jìn)行數(shù)學(xué)中的加、減、乘、除等各種運(yùn)算。

Python 提供大部分常用的算術(shù)運(yùn)算符,如加、減、乘、除等。表 2-1 給出了常用的算術(shù)運(yùn)算符。

表2-1 常用的算術(shù)運(yùn)算符

運(yùn)算符運(yùn)算的結(jié)果可能會(huì)改變數(shù)字類型,3 種數(shù)字類型之間存在一種逐漸擴(kuò)展的關(guān)系,具體如下:

整型→浮點(diǎn)型→復(fù)數(shù)類型

例如:

表2-1中所有運(yùn)算符都有與之對(duì)應(yīng)的增強(qiáng)賦值運(yùn)算符。如果用op表示表2-1的運(yùn)算符,則以下賦值操作等價(jià)。注意:運(yùn)算符op和賦值號(hào)之間沒有空格。

x op=y 等價(jià)于 x=x op y

使用增強(qiáng)賦值運(yùn)算符簡化了代碼的表達(dá)。

2.2.5 數(shù)字類型的常用函數(shù)及math庫

1.內(nèi)置的數(shù)字運(yùn)算函數(shù)

Python 提供了一些內(nèi)置函數(shù)來完成特定的操作,與數(shù)字類型相關(guān)的內(nèi)置數(shù)字運(yùn)算函數(shù)如表2-2所示。

表2-2 與數(shù)字類型相關(guān)的內(nèi)置數(shù)字運(yùn)算函數(shù)

商余函數(shù)divmod(x,y)返回的是參數(shù)x和y整除及進(jìn)行模運(yùn)算之后得到的值組合形成的元組類型數(shù)據(jù)。

2.math庫

下面來看一下浮點(diǎn)型數(shù)值的常見處理方式。

但如果我們想按照自己的方式來處理后面的小數(shù),即希望把后面的小數(shù)部分去掉,就算是 3.99 也直接去掉后面的小數(shù)部分,該怎么辦?這時(shí)可以使用一個(gè)模塊,叫作“math”,它里面有些函數(shù)可以幫我們完成想要的操作。但它不是全局函數(shù),需要加載相應(yīng)的模塊才能使用。導(dǎo)入math庫的3種方法如下。

1)import math

采用這種形式導(dǎo)入math庫后,對(duì)math庫中函數(shù)的調(diào)用方式為:math.<函數(shù)名>()。

2)import math as<別名>

math庫中函數(shù)的調(diào)用方式為:math.<別名>()。

3)from math import*

math庫中函數(shù)的調(diào)用方式為:<函數(shù)名>()。

在math庫中有很多寫好的函數(shù),或稱為方法,可以用它來執(zhí)行一些常見操作。

math庫包括數(shù)學(xué)常數(shù)(見表2-3)、數(shù)值函數(shù)(見表2-4)、冪對(duì)數(shù)函數(shù)(見表2-5)等,更多內(nèi)容請(qǐng)查閱相關(guān)文獻(xiàn)。

表2-3 math庫的數(shù)學(xué)常數(shù)

表2-4 math庫的數(shù)值函數(shù)

表2-5 math庫的冪對(duì)數(shù)函數(shù)

說明:Python 解釋器的內(nèi)部表示存在一個(gè)小數(shù)點(diǎn)后若干位的精度尾數(shù),當(dāng)進(jìn)行浮點(diǎn)數(shù)的運(yùn)算時(shí),這個(gè)精度尾數(shù)可能會(huì)影響輸出結(jié)果。因此,在進(jìn)行浮點(diǎn)數(shù)運(yùn)算及結(jié)果比較時(shí),建議采用math庫提供的函數(shù)而不是直接使用Python提供的運(yùn)算符。

floor()和trunc()方法的區(qū)別如下。

floor():總是往左邊取值,往小的方向取值。

trunc():總是往0方向取值。

與floor()方法取值相反的還有ceil(),其總是往上、往大的方向取值。

關(guān)于更多“math”模塊下的函數(shù),大家可以查詢一些相關(guān)的文檔,也可以通過 help命令進(jìn)行查閱。

2.2.6 數(shù)字類型轉(zhuǎn)換函數(shù)

Python 是一個(gè)強(qiáng)類型的語言,類型很重要。當(dāng)兩個(gè)不同類型的數(shù)據(jù)相加時(shí),需要轉(zhuǎn)換其中一個(gè)的類型,比如將帶引號(hào)的"3"變成一個(gè)真正的十進(jìn)制的整型數(shù)字,可以寫成:

轉(zhuǎn)換的工作由一個(gè)內(nèi)置函數(shù)“int”來完成,內(nèi)置函數(shù)是 Python 中已經(jīng)內(nèi)置好的,不需要額外地引入一些對(duì)象或模塊、包就可以使用的函數(shù)。Python 中內(nèi)置的數(shù)字轉(zhuǎn)換函數(shù)如表2-6所示。

表2-6 內(nèi)置的數(shù)字轉(zhuǎn)換函數(shù)

之前在聲明的時(shí)候通過加一個(gè)前綴來區(qū)分?jǐn)?shù)的進(jìn)制,現(xiàn)在轉(zhuǎn)換的時(shí)候可以再加一個(gè)參數(shù)來告訴系統(tǒng)前面這個(gè)字符串的值是基于二進(jìn)制的。依次類推,我們也可以轉(zhuǎn)換八進(jìn)制數(shù)、十六進(jìn)制數(shù)。

函數(shù)complex更詳細(xì)的用法請(qǐng)通過“help(complex)”命令進(jìn)行查閱。

2.2.7 浮點(diǎn)型精度處理

之前在計(jì)算浮點(diǎn)數(shù)時(shí),大多數(shù)情況下都能得到所期望的結(jié)果,但接下來我們看一個(gè)特殊情況。下面是一個(gè)有關(guān)浮點(diǎn)型數(shù)字計(jì)算的簡單表達(dá)式。

盡管結(jié)果非常接近 0,但它不是 0。這在精度要求非常高的金融或財(cái)務(wù)領(lǐng)域是不能容忍的,因?yàn)檫@些領(lǐng)域一點(diǎn)點(diǎn)誤差都不能有。

造成這個(gè)問題的根本原因在于,計(jì)算機(jī)內(nèi)部的二進(jìn)制存儲(chǔ)機(jī)制本身就沒辦法存儲(chǔ)某些特定的數(shù)值,但是在精度要求非常高的科學(xué)計(jì)算或金融財(cái)務(wù)領(lǐng)域,又不允許出現(xiàn)絲毫的誤差,那該如何解決這個(gè)問題呢?

Python 提供了一個(gè)專門的模塊“decimal”來解決有關(guān)浮點(diǎn)數(shù)的精度問題。通過decimal 模塊下的類 Decimal(第一個(gè)字母大寫),提供了一種精度更高的處理浮點(diǎn)型數(shù)字的機(jī)制。

注意:這里是將字符串'0.1'作為參數(shù)傳遞給 decimal 模塊的類 Decimal 來構(gòu)造函數(shù),實(shí)際使用時(shí)經(jīng)常會(huì)犯錯(cuò),漏掉了'0.1'兩邊的引號(hào)。

如果想要以字符串的形式顯示在頁面或控制臺(tái)上,可以通過將它賦值給一個(gè)變量,然后通過格式化的方式(后面將介紹格式化輸出)或通過“str”轉(zhuǎn)換一下再輸出。

“import decimal”導(dǎo)入模塊的方式,在使用 decimal 模塊的每個(gè)類時(shí)都要帶上前綴“decimal.”,這種方式有點(diǎn)煩瑣,可以用如下方式來導(dǎo)入,從而可以有一種簡化的表示方式:

其中,from decimal import decimal 表示從 Decimal 模塊導(dǎo)入 Decimal 類。其語法為:

注意:浮點(diǎn)型的存儲(chǔ)是有缺陷的,所以在精度要求更高的場合,可以使用 decimal模塊的類 Decimal 來實(shí)現(xiàn)。但使用 decimal 模塊的類 Decimal 傳參數(shù)時(shí)一定要以字符串的形式進(jìn)行傳參。否則,如果直接傳一個(gè)浮點(diǎn)型,它不會(huì)報(bào)錯(cuò),但得不到我們想要的結(jié)果。

主站蜘蛛池模板: 灵石县| 宜兴市| 葫芦岛市| 博爱县| 通榆县| 毕节市| 天祝| 永定县| 五指山市| 马公市| 密云县| 高碑店市| 南靖县| 巴彦县| 乐亭县| 深泽县| 孙吴县| SHOW| 临清市| 瓦房店市| 平安县| 鹤岗市| 荥经县| 平山县| 鸡西市| 天等县| 达日县| 桐柏县| 芮城县| 庆安县| 双辽市| 菏泽市| 郯城县| 余姚市| 利辛县| 沾化县| 莱州市| 梧州市| 瑞昌市| 海晏县| 上蔡县|