日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

【mysql】浮点类型

發布時間:2023/12/16 数据库 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【mysql】浮点类型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 浮點類型
    • 1. 類型介紹
    • 2. 數據精度說明
    • 3. 精度誤差說明

浮點類型

1. 類型介紹

  • 浮點數定點數類型的特點是可以處理小數,你可以把整數看成小數的一個特例。因此,浮點數和定點數的使用場景,比整數大多了。 MySQL支持的浮點數類型,分別是 FLOAT、DOUBLE、REAL。

  • FLOAT 表示單精度浮點數;

  • DOUBLE 表示雙精度浮點數;

  • REAL默認就是 DOUBLE。如果把 SQL 模式設定為啟用“REAL_AS_FLOAT”,那 么,MySQL 就認為 REAL 是 FLOAT。如果要啟用“REAL_AS_FLOAT”,可以通過以下 SQL 語句實現:
SET sql_mode = “REAL_AS_FLOAT”;

問題1: FLOAT 和 DOUBLE 這兩種數據類型的區別是什么?

FLOAT 占用字節數少,取值范圍小;DOUBLE 占用字節數多,取值范圍也大。

問題2: 為什么浮點數類型的無符號數取值范圍,只相當于有符號數取值范圍的一半,也就是只相當于有符號數取值范圍大于等于零的部分呢?

MySQL 存儲浮點數的格式為:符號(S)、尾數(M)和 階碼(E)。因此,無論有沒有符號,MySQL 的浮點數都會存儲表示符號的部分。因此, 所謂的無符號數取值范圍,其實就是有符號數取值范圍大于等于零的部分。

2. 數據精度說明

對于浮點類型,在MySQL中單精度值使用4個字節,雙精度值使用8個字節。

  • MySQL允許使用非標準語法(其他數據庫未必支持,因此如果涉及到數據遷移,則最好不要這么用):FLOAT(M,D)或DOUBLE(M,D)。這里,M稱為精度,D稱為標度。(M,D)中 M=整數位+小數位,D=小數位。 D<=M<=255,0<=D<=30。

    例如,定義為FLOAT(5,2)的一個列可以顯示為-999.99-999.99。如果超過這個范圍會報錯。

  • FLOAT和DOUBLE類型在不指定(M,D)時,默認會按照實際的精度(由實際的硬件和操作系統決定)來顯示。

  • 說明:浮點類型,也可以加UNSIGNED,但是不會改變數據范圍,例如:FLOAT(3,2) UNSIGNED仍然只能表示0-9.99的范圍。

  • 不管是否顯式設置了精度(M,D),這里MySQL的處理方案如下:

    • 如果存儲時,整數部分超出了范圍,MySQL就會報錯,不允許存這樣的值

    • 如果存儲時,小數點部分若超出范圍,就分以下情況:

      • 若四舍五入后,整數部分沒有超出范圍,則只警告,但能成功操作并四舍五入刪除多余的小數位后保存。例如在FLOAT(5,2)列內插入999.009,近似結果是999.01。
      • 若四舍五入后,整數部分超出范圍,則MySQL報錯,并拒絕處理。如FLOAT(5,2)列內插入999.995和-999.995都會報錯。
  • 從MySQL 8.0.17開始,FLOAT(M,D) 和DOUBLE(M,D)用法在官方文檔中已經明確不推薦使用,將來可能被移除。另外,關于浮點型FLOAT和DOUBLE的UNSIGNED也不推薦使用了,將來也可能被移除。

  • 舉例

CREATE TABLE test_double1( f1 FLOAT, f2 FLOAT(5,2), f3 DOUBLE, f4 DOUBLE(5,2) );DESC test_double1;

INSERT INTO test_double1(f1, f2) VALUES(123.45,123.45);SELECT * FROM test_double1;

  • 存在四舍五入問題
INSERT INTO test_double1(f3,f4) VALUES(123.45,123.456); #存在四舍五入

  • 超出范圍,因為 f4(5,2),可以得知 整數位:3,小數位:2,1234.456 超出整數位的訪問了
INSERT INTO test_double1(f3,f4) VALUES(123.45,1234.456);

  • 小數位超過就四舍五入,整數位超了就報錯了

3. 精度誤差說明

浮點數類型有個缺陷,就是不精準。下面我來重點解釋一下為什么 MySQL 的浮點數不夠精準。比如,我們設計一個表,有f1這個字段,插入值分別為0.47,0.44,0.19,我們期待的運行結果是:0.47 + 0.44 + 0.19 = 1.1。而使用sum之后查詢:

CREATE TABLE test_double2( f1 DOUBLE );INSERT INTO test_double2 VALUES(0.47),(0.44),(0.19); mysql> SELECT SUM(f1)-> FROM test_double2; +--------------------+ | SUM(f1) | +--------------------+ | 1.0999999999999999 | +--------------------+ 1 row in set (0.00 sec) mysql> SELECT SUM(f1) = 1.1,1.1 = 1.1-> FROM test_double2; +---------------+-----------+ | SUM(f1) = 1.1 | 1.1 = 1.1 | +---------------+-----------+ | 0 | 1 | +---------------+-----------+ 1 row in set (0.00 sec)
  • 查詢結果是 1.0999999999999999。看到了嗎?雖然誤差很小,但確實有誤差。 你也可以嘗試把數據類型改成 FLOAT,然后運行求和查詢,得到的是, 1.0999999940395355。顯然,誤差更大了。

  • 那么,為什么會存在這樣的誤差呢?問題還是出在 MySQL 對浮點類型數據的存儲方式上。

  • MySQL 用 4 個字節存儲 FLOAT 類型數據,用 8 個字節來存儲 DOUBLE 類型數據。無論哪個,都是采用二進制的方式來進行存儲的。比如 9.625,用二進制來表達,就是 1001.101,或者表達成 1.001101×2^3。如果尾數不是 0 或 5(比如 9.624),你就無法用一個二進制數來精確表達。進而,就只好在取值允許的范圍內進行四舍五入。

  • 在編程中,如果用到浮點數,要特別注意誤差問題,因為浮點數是不準確的,所以我們要避免使用“=”來判斷兩個數是否相等。 同時,在一些對精確度要求較高的項目中,千萬不要使用浮點數,不然會導致結果錯誤,甚至是造成不可挽回的損失。那么,MySQL 有沒有精準的數據類型呢?當然有,這就是定點數類型:DECIMAL。

總結

以上是生活随笔為你收集整理的【mysql】浮点类型的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲欧美第一页 | 日韩av大全| 久久草av | 成人一级视频 | 涩涩亚洲 | 日本毛片视频 | 视频一区在线播放 | 一本色道久久综合 | 欧美精品福利 | 本道久久 | 91免费精品视频 | 福利国产视频 | 亚洲国产精品久久久久婷婷老年 | 欧洲亚洲一区二区 | 男生女生搞鸡视频 | 日本在线观看中文字幕 | 国产激情无码一区二区 | 日剧再来一次第十集 | 成人综合一区二区 | 中文字幕一区二区精品 | 偷拍中国夫妇高潮视频 | 色伊人av | 影音先锋成人网 | 多毛的亚洲人毛茸茸 | 免费观看h片| 久操福利在线 | 亚洲一区二区色图 | 黄色在线资源 | 日韩视频第一页 | 日日撸夜夜撸 | 免费91视频 | 日本三级一区二区三区 | 中文字幕色片 | 国产精品无码一区二区三 | 第一av在线 | 青青草97国产精品免费观看 | 国产又爽又黄又嫩又猛又粗 | 欧美色综合天天久久综合精品 | 日韩精品免费在线 | 欧美性videos高清精品 | 成人三级黄色片 | 一本之道久久 | 国偷自产视频一区二区久 | 男插女av | 亚洲日本成人在线观看 | 看黄色的网站 | 狂野欧美性猛交blacked | www.白虎| 伊人22| 视频二区在线 | 日韩精品手机在线 | 国产尤物视频 | 国产原创视频在线观看 | 国内毛片毛片毛片毛片毛片 | 黑人性高潮 | 国产极品视频 | 色噜噜综合 | 亚洲啊啊 | 干极品美女 | 性欧美成人播放77777 | 日本一区二区免费电影 | 欧美sm凌虐视频网站 | 久久久久久久久成人 | 手机电影在线观看 | 逼特逼在线视频 | 久久免费精品 | 在线观看亚洲精品 | 最新av免费| 日韩三级小视频 | 欧美在线一区二区视频 | 另类小说色综合 | 插女生下面 | 不卡一区在线观看 | 午夜男人影院 | 理论片中文字幕 | 日韩av网站在线观看 | 国产69精品久久久久999小说 | 久久久久久国产 | av网址网站| 在线免费观看黄视频 | 久久丫精品国产亚洲av不卡 | 公妇借种乱htp109cc | 日韩一级欧美一级 | 欧美色图在线播放 | 国产黄色片网站 | 精品免费久久久 | 色偷偷免费 | 国产免费av在线 | 美女十八毛片 | 欧美午夜久久 | 黑人干亚洲人 | 欧美一区二区三区视频在线观看 | 人妻久久一区二区 | 天天摸天天碰 | 亚洲激情另类 | 色婷五月 | 男女激情久久 | 亚洲第一黄色网 | 国产在线不卡视频 |