搜尋
首頁資料庫mysql教程總結MySQL中float、double、decimal三個浮點類型的差異

mysql影片教學欄位總結MySQL中三個浮點類型的差異

總結MySQL中float、double、decimal三個浮點類型的差異

下表中規劃了每個浮點類型的儲存大小和範圍:

##==double==8 bytes(-1.797 693 134 862 315 7 E 308,-2.225073858507 2014E-308),0,(2.225 073 858 507 201 4 E-308,6381 69632# 201 4 E-308,63172201 2132220132522,6312232,63232# 63125322,632122,63212322,632#72,6321232,63232# 63232。 依賴M和D的值
#型別 大小 範圍(有符號) 範圍(無符號) 用途
#==float== 4 bytes (-3.402 823 466 E 38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E 38)##. 351 E-38,3.402 823 466 E 38) 單精確度浮點數值
#0 ,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E 308) #雙精確度浮點數值 #decimal #對decimal(M,D) ,如果M>D,為M 2否則為D 2
依賴M和D的值 小數值

那麼MySQL中這三種都是浮點型別 它們彼此的差別又是什麼呢 ? ?

  1. float 浮點型別用來表示==單精確度浮點==數值,
  2. double浮點型別用來表示==雙精確度浮點==數值

<strong>這裡肯定有些小夥伴要問了 什麼是單精確度什麼是雙精確度?下面我們就來簡單了解一下吧!</strong>

我們知道一個bytes(字節) 佔8位元對吧!

float單精度儲存浮點類型的話就是==4x8=32位元的長度==  , 所以float單精確度浮點數在記憶體中佔4 個位元組,並且用32 位元二進位來描述

那麼double雙精確度儲存浮點類型就是== 8x8 =64位元的長度==,  所以double雙精確度浮點數在記憶體中佔8 個位元組,並且用64 位元二進位進行描述 透過計算、那麼64位元就可以獲得更多的尾數!

尾數 : ==就是小數點後的有多少個數字==

所以這裡的精度主要取決於==尾數==部分的位數, 所以根據IEEE二進制浮點數算術標準 來計算得出結論:

float單精度小數部分只能精確到後面6位,加上小數點前的一位,即有效數字為7位

double雙精度小數部分能精確到小數點後的15位,加上小數點前的一位有效位數為16位。

最後就區別出了小數點後邊位數的長度,越長越精確!

#double 和float 彼此的區別:

  1. 在記憶體中佔有的位元組數不同, 單精確度記憶體佔4個位元組,  雙精度記憶體佔8個位元組
  2. 有效數字位數不同(尾數)  單精確度小數點後有效位數7位,  雙精度小數點後有效位數16位元
  3. 數值取值範圍不同 根據IEEE標準來計算!
  4. 在程式中處理速度不同,一般來說,CPU處理單精度浮點數的速度比處理雙精度浮點數快

double 和float 彼此的優缺點:

float單精度

優點: float單精度在某些處理器上比double雙精度更快而且只佔用double雙精度一半的空間

缺點: 但是當值很大或很小的時候,它將變得不精確。

double雙精確度

優點: double 跟float比較, 必然是double 精確度高,尾數可以有16 位元,而 float 尾數精確度只有7 位元

缺點: double 雙精度是消耗內存的,並且是float 單精度的兩倍! ,double 的運算速度比float 慢得多, 因為double 尾數比float  的尾數多, 所以計算起來必然是有開銷的!

如何選擇double 和float 的使用場景!

#首先: 能用單精度時不要用雙精度以省內存,加快運算速度!

float: 當然你需要小數部分且對精度的要求不高時,選擇float單精度浮點型比較好!

double: 因為小數位精度高的緣故,所以雙精度用來進行高速數學計算、科學計算、衛星定位計算等處理器上雙精度型實際上比單精度的快, 所以: 當你需要保持多次反复迭代的計算精確性時,或在操作值很大的數字時,雙精度型是最好的選擇。

說這麼多其實就是小數點後面的保留位數多少的問題!

==小結double和float:==

float 表示的小數點位數少, double能表示的小數點位數多,更精確!就這麼簡單看情況自己選擇吧!

double和float 後面的長度m,d代表的是什麼?

double(m,d) 和float( m,d) 這裡的m,d代表的是什麼呢?很多小夥伴也是不清不楚的!  我還是來繼續解釋一下吧

其實跟前面整數int(n)一樣,這些類型也帶有附加參數:一個顯示寬度m和一個小數點後面帶的個數d

例如: 語句float(7,3) 規定顯示的值不會超過7 位數字,小數點後面帶有3 位數字、double也是同理

在MySQL中,在定義表格欄位的時候,  unsigned和zerofill 修飾符也可以被float、double和decimal資料型別使用, 並且效果與int資料型別相同 跟上面一樣這裡就不多說了!

====小結:==

在MySQL 語句中, 實際定義表格欄位的時候,

float(M,D) unsigned  中的M代表可以使用的數字位數,D則代表小數點後的小數位數, unsigned 代表不允許使用負數!

double(M,D) unsigned 中的M代表可以使用的數字位數,D則代表小數點後的小數位數

==注意:== M>=D!

decimal類型

==1.介紹decimal==

在儲存同樣範圍的值時,通常比decimal使用更少的空間,float使用4個字節存儲,double使用8個字節 ,

而decimal依賴於M和D的值,所以decimal使用更少的空間

在實際的企業級開發中,經常遇到需要儲存金額(3888.00元)的字段,這時候就需要用到資料類型decimal。 在MySQL資料庫中,decimal的使用語法是:decimal(M,D),其中, M 的範圍是165, D 的範圍是030, 而且D不能大於M。

==2.最大值==

資料類型為decimal的字段,可以儲存的最大值/範圍是多少? 例如:decimal(5,2),則該欄位可以儲存-999.99~999.99,最大值為999.99。 也就是說D表示的是小數部分長度,(M-D)表示的是整數部分長度。

==3.儲存==  [了解] decimal類型的資料儲存形式是,將每9位元十進位數儲存為4個位元組

(官方解釋:Values for DECIMAL columns are stored using a binary format that packs nine decimal digits into 4 bytes)。

那有可能設定的位數不是9的倍數,官方也給瞭如下表格對照:

##Number of Bytes001–21 3–42#5–63#7–94
#Leftover Digits
==表格甚麼意思呢,舉個例子:==

# 1.字段decimal(18,9),18-9=9,這樣整數部分和小數部分都是9,那兩邊分別佔用4個位元組; 2.字段decimal(20,6),20-6=14,其中小數部分為6,就對應上表中的3個位元組,而整數部分為14,14-9=5,就是4個位元組再加上表格中的3個位元組

所以通常我們在設定小數的時候,都是用的decimal型別!!


小案例1

mysql> drop table temp2;
Query OK, 0 rows affected (0.15 sec)

mysql> create table temp2(id float(10,2),id2 double(10,2),id3 decimal(10,2));
Query OK, 0 rows affected (0.18 sec)

mysql>  insert into temp2 values(1234567.21, 1234567.21,1234567.21),(9876543.21, 
    -> 9876543.12, 9876543.12);
Query OK, 2 rows affected (0.06 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from temp2;
+------------+------------+------------+
| id         | id2        | id3        |
+------------+------------+------------+
| 1234567.25 | 1234567.21 | 1234567.21 |
| 9876543.00 | 9876543.12 | 9876543.12 |
+------------+------------+------------+
2 rows in set (0.01 sec)

mysql> desc temp2;
+-------+---------------+------+-----+---------+-------+
| Field | Type          | Null | Key | Default | Extra |
+-------+---------------+------+-----+---------+-------+
| id    | float(10,2)   | YES  |     | NULL    |       |
| id2   | double(10,2)  | YES  |     | NULL    |       |
| id3   | decimal(10,2) | YES  |     | NULL    |       |
+-------+---------------+------+-----+---------+-------+
3 rows in set (0.01 sec)复制代码

小案例2

mysql> drop table temp2;
Query OK, 0 rows affected (0.16 sec)

mysql> create table temp2(id double,id2 double);
Query OK, 0 rows affected (0.09 sec)

mysql> insert into temp2 values(1.235,1,235);
ERROR 1136 (21S01): Column count doesn't match value count at row 1
mysql> insert into temp2 values(1.235,1.235);
Query OK, 1 row affected (0.03 sec)

mysql> 
mysql> select * from temp2;
+-------+-------+
| id    | id2   |
+-------+-------+
| 1.235 | 1.235 |
+-------+-------+
1 row in set (0.00 sec)

mysql> insert into temp2 values(3.3,4.4);
Query OK, 1 row affected (0.09 sec)

mysql> select * from temp2;
+-------+-------+
| id    | id2   |
+-------+-------+
| 1.235 | 1.235 |
|   3.3 |   4.4 |
+-------+-------+
2 rows in set (0.00 sec)

mysql> select id-id2 from temp2;
+---------------------+
| id-id2              |
+---------------------+
|                   0 |
| -1.1000000000000005 |
+---------------------+
2 rows in set (0.00 sec)

mysql> alter table temp2 modify id decimal(10,5);
Query OK, 2 rows affected (0.28 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> alter table temp2 modify id2 decimal(10,5);
Query OK, 2 rows affected (0.15 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from temp2;
+---------+---------+
| id      | id2     |
+---------+---------+
| 1.23500 | 1.23500 |
| 3.30000 | 4.40000 |
+---------+---------+
2 rows in set (0.00 sec)

mysql> select id-id2 from temp2;
+----------+
| id-id2   |
+----------+
|  0.00000 |
| -1.10000 |
+----------+
2 rows in set (0.00 sec)复制代码

相關免費學習推薦:#mysql影片教學

以上是總結MySQL中float、double、decimal三個浮點類型的差異的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:juejin。如有侵權,請聯絡admin@php.cn刪除
MySQL中的存儲過程是什麼?MySQL中的存儲過程是什麼?May 01, 2025 am 12:27 AM

存儲過程是MySQL中的預編譯SQL語句集合,用於提高性能和簡化複雜操作。 1.提高性能:首次編譯後,後續調用無需重新編譯。 2.提高安全性:通過權限控制限制數據表訪問。 3.簡化複雜操作:將多條SQL語句組合,簡化應用層邏輯。

查詢緩存如何在MySQL中工作?查詢緩存如何在MySQL中工作?May 01, 2025 am 12:26 AM

MySQL查詢緩存的工作原理是通過存儲SELECT查詢的結果,當相同查詢再次執行時,直接返回緩存結果。 1)查詢緩存提高數據庫讀取性能,通過哈希值查找緩存結果。 2)配置簡單,在MySQL配置文件中設置query_cache_type和query_cache_size。 3)使用SQL_NO_CACHE關鍵字可以禁用特定查詢的緩存。 4)在高頻更新環境中,查詢緩存可能導致性能瓶頸,需通過監控和調整參數優化使用。

與其他關係數據庫相比,使用MySQL的優點是什麼?與其他關係數據庫相比,使用MySQL的優點是什麼?May 01, 2025 am 12:18 AM

MySQL被廣泛應用於各種項目中的原因包括:1.高性能與可擴展性,支持多種存儲引擎;2.易於使用和維護,配置簡單且工具豐富;3.豐富的生態系統,吸引大量社區和第三方工具支持;4.跨平台支持,適用於多種操作系統。

您如何處理MySQL中的數據庫升級?您如何處理MySQL中的數據庫升級?Apr 30, 2025 am 12:28 AM

MySQL數據庫升級的步驟包括:1.備份數據庫,2.停止當前MySQL服務,3.安裝新版本MySQL,4.啟動新版本MySQL服務,5.恢復數據庫。升級過程需注意兼容性問題,並可使用高級工具如PerconaToolkit進行測試和優化。

您可以使用MySQL的不同備份策略是什麼?您可以使用MySQL的不同備份策略是什麼?Apr 30, 2025 am 12:28 AM

MySQL備份策略包括邏輯備份、物理備份、增量備份、基於復制的備份和雲備份。 1.邏輯備份使用mysqldump導出數據庫結構和數據,適合小型數據庫和版本遷移。 2.物理備份通過複製數據文件,速度快且全面,但需數據庫一致性。 3.增量備份利用二進制日誌記錄變化,適用於大型數據庫。 4.基於復制的備份通過從服務器備份,減少對生產系統的影響。 5.雲備份如AmazonRDS提供自動化解決方案,但成本和控制需考慮。選擇策略時應考慮數據庫大小、停機容忍度、恢復時間和恢復點目標。

什麼是mySQL聚類?什麼是mySQL聚類?Apr 30, 2025 am 12:28 AM

MySQLclusteringenhancesdatabaserobustnessandscalabilitybydistributingdataacrossmultiplenodes.ItusestheNDBenginefordatareplicationandfaulttolerance,ensuringhighavailability.Setupinvolvesconfiguringmanagement,data,andSQLnodes,withcarefulmonitoringandpe

如何優化數據庫架構設計以在MySQL中的性能?如何優化數據庫架構設計以在MySQL中的性能?Apr 30, 2025 am 12:27 AM

在MySQL中優化數據庫模式設計可通過以下步驟提升性能:1.索引優化:在常用查詢列上創建索引,平衡查詢和插入更新的開銷。 2.表結構優化:通過規範化或反規範化減少數據冗餘,提高訪問效率。 3.數據類型選擇:使用合適的數據類型,如INT替代VARCHAR,減少存儲空間。 4.分區和分錶:對於大數據量,使用分區和分錶分散數據,提升查詢和維護效率。

您如何優化MySQL性能?您如何優化MySQL性能?Apr 30, 2025 am 12:26 AM

tooptimizemysqlperformance,lofterTheSeSteps:1)inasemproperIndexingTospeedUpqueries,2)使用ExplaintplaintoAnalyzeandoptimizequeryPerformance,3)ActiveServerConfigurationStersLikeTlikeTlikeTlikeIkeLikeIkeIkeLikeIkeLikeIkeLikeIkeLikeNodb_buffer_pool_sizizeandmax_connections,4)

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器