Python入門開發(fā)學(xué)習(xí)筆記之掌握數(shù)值類型

本節(jié)重點(diǎn)

  • 掌握整型
  • 掌握浮點(diǎn)型

本節(jié)時(shí)長(zhǎng)需控制在15分鐘內(nèi)

數(shù)值類型

1、整數(shù)類型

整數(shù)類型:TINYINT SMALLINT MEDIUMINT INT BIGINT

作用:存儲(chǔ)年齡,等級(jí),id,各種號(hào)碼等

========================================
        tinyint[(m)] [unsigned] [zerofill]

            小整數(shù),數(shù)據(jù)類型用于保存一些范圍的整數(shù)數(shù)值范圍:
            有符號(hào):
                -128 ~ 127
            無符號(hào):
                0 ~ 255

            PS: MySQL中無布爾值,使用tinyint(1)構(gòu)造。

========================================
        int[(m)][unsigned][zerofill]

            整數(shù),數(shù)據(jù)類型用于保存一些范圍的整數(shù)數(shù)值范圍:
            有符號(hào):
                    -2147483648 ~ 2147483647
            無符號(hào):
                    0 ~ 4294967295

========================================
        bigint[(m)][unsigned][zerofill]
            大整數(shù),數(shù)據(jù)類型用于保存一些范圍的整數(shù)數(shù)值范圍:
            有符號(hào):
                    -9223372036854775808 ~ 9223372036854775807
            無符號(hào):
                    0  ~  18446744073709551615

驗(yàn)證

=========有符號(hào)和無符號(hào)tinyint==========
#tinyint默認(rèn)為有符號(hào)
MariaDB [db1]> create table t1(x tinyint); #默認(rèn)為有符號(hào),即數(shù)字前有正負(fù)號(hào)
MariaDB [db1]> desc t1;
MariaDB [db1]> insert into t1 values
    -> (-129),
    -> (-128),
    -> (127),
    -> (128);
MariaDB [db1]> select * from t1;
+------+
| x    |
+------+
| -128 | #-129存成了-128
| -128 | #有符號(hào),最小值為-128
|  127 | #有符號(hào),最大值127
|  127 | #128存成了127
+------+

#設(shè)置無符號(hào)tinyint
MariaDB [db1]> create table t2(x tinyint unsigned);
MariaDB [db1]> insert into t2 values
    -> (-1),
    -> (0),
    -> (255),
    -> (256);
MariaDB [db1]> select * from t2;
+------+
| x    |
+------+
|    0 | -1存成了0
|    0 | #無符號(hào),最小值為0
|  255 | #無符號(hào),最大值為255
|  255 | #256存成了255
+------+

============有符號(hào)和無符號(hào)int=============
#int默認(rèn)為有符號(hào)
MariaDB [db1]> create table t3(x int); #默認(rèn)為有符號(hào)整數(shù)
MariaDB [db1]> insert into t3 values
    -> (-2147483649),
    -> (-2147483648),
    -> (2147483647),
    -> (2147483648);
MariaDB [db1]> select * from t3;
+-------------+
| x           |
+-------------+
| -2147483648 | #-2147483649存成了-2147483648
| -2147483648 | #有符號(hào),最小值為-2147483648
|  2147483647 | #有符號(hào),最大值為2147483647
|  2147483647 | #2147483648存成了2147483647
+-------------+

#設(shè)置無符號(hào)int
MariaDB [db1]> create table t4(x int unsigned);
MariaDB [db1]> insert into t4 values
    -> (-1),
    -> (0),
    -> (4294967295),
    -> (4294967296);
MariaDB [db1]> select * from t4;
+------------+
| x          |
+------------+
|          0 | #-1存成了0
|          0 | #無符號(hào),最小值為0
| 4294967295 | #無符號(hào),最大值為4294967295
| 4294967295 | #4294967296存成了4294967295
+------------+

==============有符號(hào)和無符號(hào)bigint=============
MariaDB [db1]> create table t6(x bigint);
MariaDB [db1]> insert into t5 values  
    -> (-9223372036854775809),
    -> (-9223372036854775808),
    -> (9223372036854775807),
    -> (9223372036854775808);

MariaDB [db1]> select * from t5;
+----------------------+
| x                    |
+----------------------+
| -9223372036854775808 |
| -9223372036854775808 |
|  9223372036854775807 |
|  9223372036854775807 |
+----------------------+

MariaDB [db1]> create table t6(x bigint unsigned);
MariaDB [db1]> insert into t6 values  
    -> (-1),
    -> (0),
    -> (18446744073709551615),
    -> (18446744073709551616);

MariaDB [db1]> select * from t6;
+----------------------+
| x                    |
+----------------------+
|                    0 |
|                    0 |
| 18446744073709551615 |
| 18446744073709551615 |
+----------------------+

======用zerofill測(cè)試整數(shù)類型的顯示寬度=============
MariaDB [db1]> create table t7(x int(3) zerofill);
MariaDB [db1]> insert into t7 values
    -> (1),
    -> (11),
    -> (111),
    -> (1111);
MariaDB [db1]> select * from t7;
+------+
| x    |
+------+
|  001 |
|  011 |
|  111 |
| 1111 | #超過寬度限制仍然可以存
+------+

注意:為該類型指定寬度時(shí),僅僅只是指定查詢結(jié)果的顯示寬度,與存儲(chǔ)范圍無關(guān),存儲(chǔ)范圍如下

其實(shí)我們完全沒必要為整數(shù)類型指定顯示寬度,使用默認(rèn)的就可以了

默認(rèn)的顯示寬度,都是在最大值的基礎(chǔ)上加1

[圖片上傳失敗...(image-29cd5f-1658457262935)]

int的存儲(chǔ)寬度是4個(gè)Bytes,即32個(gè)bit,即2**32

無符號(hào)最大值為:4294967296-1

有符號(hào)最大值:2147483648-1

有符號(hào)和無符號(hào)的最大數(shù)字需要的顯示寬度均為10,而針對(duì)有符號(hào)的最小值則需要11位才能顯示完全,所以int類型默認(rèn)的顯示寬度為11是非常合理的

最后:整形類型,其實(shí)沒有必要指定顯示寬度,使用默認(rèn)的就ok

2、浮點(diǎn)型

定點(diǎn)數(shù)類型 DEC等同于DECIMAL

浮點(diǎn)類型:FLOAT DOUBLE

作用:存儲(chǔ)薪資、身高、體重、體質(zhì)參數(shù)等

======================================
#FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]

定義:
        單精度浮點(diǎn)數(shù)(非準(zhǔn)確小數(shù)值),m是數(shù)字總個(gè)數(shù),d是小數(shù)點(diǎn)后個(gè)數(shù)。m最大值為255,d最大值為30

有符號(hào):
           -3.402823466E+38 to -1.175494351E-38,
           1.175494351E-38 to 3.402823466E+38
無符號(hào):
           1.175494351E-38 to 3.402823466E+38

精確度: 
           **** 隨著小數(shù)的增多,精度變得不準(zhǔn)確 ****

======================================
#DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]

定義:
           雙精度浮點(diǎn)數(shù)(非準(zhǔn)確小數(shù)值),m是數(shù)字總個(gè)數(shù),d是小數(shù)點(diǎn)后個(gè)數(shù)。m最大值為255,d最大值為30

有符號(hào):
           -1.7976931348623157E+308 to -2.2250738585072014E-308
           2.2250738585072014E-308 to 1.7976931348623157E+308

無符號(hào):
           2.2250738585072014E-308 to 1.7976931348623157E+308

精確度:
           ****隨著小數(shù)的增多,精度比f(wàn)loat要高,但也會(huì)變得不準(zhǔn)確 ****

======================================
decimal[(m[,d])] [unsigned] [zerofill]

定義:
          準(zhǔn)確的小數(shù)值,m是數(shù)字總個(gè)數(shù)(負(fù)號(hào)不算),d是小數(shù)點(diǎn)后個(gè)數(shù)。 m最大值為65,d最大值為30。

精確度:
           **** 隨著小數(shù)的增多,精度始終準(zhǔn)確 ****
           對(duì)于精確數(shù)值計(jì)算時(shí)需要用此類型
           decaimal能夠存儲(chǔ)精確值的原因在于其內(nèi)部按照字符串存儲(chǔ)。

驗(yàn)證

mysql> create table t1(x float(256,31));
ERROR 1425 (42000): Too big scale 31 specified for column 'x'. Maximum is 30.
mysql> create table t1(x float(256,30));
ERROR 1439 (42000): Display width out of range for column 'x' (max = 255)
mysql> create table t1(x float(255,30)); #建表成功
Query OK, 0 rows affected (0.02 sec)

mysql> create table t2(x double(255,30)); #建表成功
Query OK, 0 rows affected (0.02 sec)

mysql> create table t3(x decimal(66,31));
ERROR 1425 (42000): Too big scale 31 specified for column 'x'. Maximum is 30.
mysql> create table t3(x decimal(66,30));
ERROR 1426 (42000): Too-big precision 66 specified for 'x'. Maximum is 65.
mysql> create table t3(x decimal(65,30)); #建表成功
Query OK, 0 rows affected (0.02 sec)

mysql> show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| t1            |
| t2            |
| t3            |
+---------------+
rows in set (0.00 sec)

mysql> insert into t1 values(1.1111111111111111111111111111111); #小數(shù)點(diǎn)后31個(gè)1
Query OK, 1 row affected (0.01 sec)

mysql> insert into t2 values(1.1111111111111111111111111111111);
Query OK, 1 row affected (0.00 sec)

mysql> insert into t3 values(1.1111111111111111111111111111111);
Query OK, 1 row affected, 1 warning (0.01 sec)

mysql> select * from t1; #隨著小數(shù)的增多,精度開始不準(zhǔn)確
+----------------------------------+
| x                                |
+----------------------------------+
| 1.111111164093017600000000000000 |
+----------------------------------+
row in set (0.00 sec)

mysql> select * from t2; #精度比f(wàn)loat要準(zhǔn)確點(diǎn),但隨著小數(shù)的增多,同樣變得不準(zhǔn)確
+----------------------------------+
| x                                |
+----------------------------------+
| 1.111111111111111200000000000000 |
+----------------------------------+
row in set (0.00 sec)

mysql> select * from t3; #精度始終準(zhǔn)確,d為30,于是只留了30位小數(shù)
+----------------------------------+
| x                                |
+----------------------------------+
| 1.111111111111111111111111111111 |
+----------------------------------+
row in set (0.00 sec)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,401評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,011評(píng)論 3 413
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,263評(píng)論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,543評(píng)論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,323評(píng)論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,874評(píng)論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,968評(píng)論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,095評(píng)論 0 286
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,605評(píng)論 1 331
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,551評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,720評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,242評(píng)論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 43,961評(píng)論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,358評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,612評(píng)論 1 280
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,330評(píng)論 3 390
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,690評(píng)論 2 370

推薦閱讀更多精彩內(nèi)容