使用Navicat存float類型的小數

問題描述

使用navicat存儲一個float類型的小數,添加字段後,其餘的保持默認設置。html

clipboard.png

而後存一條數據,float類型的數據爲129364.57。保存後的結果:mysql

clipboard.png

捨棄了小數部分,而後四捨五入爲129365sql

而後又從新試了幾個其餘的小數,發現都是這個狀況。測試

猜想

1.聯想到之前學C語言的時候,不一樣數據類型所佔長度不一樣,因此就猜想多是精度不夠了。google

由於是二進制,因此在存儲小數的時候只能有2的負n次冪這樣的相加得出的小數,因此我就試一下129364.25,依然不行,仍是沒有小數部分,只有整數部分,而且一樣知足四捨五入。spa

因此不是精度的問題。設計

2.既然沒有小數,是否是默認沒有小數部分呢。3d

而後從新設計表,發現果真小數部分爲0,而後將其改成2:code

clipboard.png

再從新測試:htm

clipboard.png

正常保存!

後續

google了一下網上的答案,發現有對存儲長度的限制,而後就去官方文檔看了看。

標題就很能說明問題

clipboard.png

估計值。感受官方文檔並無說什麼東西,可是咱們知道了float的估計是有長度和精度兩個參數控制的。而後再結合google的結果,發現float只支持8位,當整數加小數部分超出8位,它就開始估計了。

固然也不是說全部的8位均可以,也是有個範圍的,由於float使用4個字節,因此當數值大小超過65536(2的16次方),即便八位數也是會出現估計的現象。好比咱們存一個65536.777,可是保存後結果確不是這個數:

clipboard.png

總結

1.小於65536,8位之內數字正常顯示;超出8位進行近似估計(也就是數值不許)。
2.大於65536,接近8位的數字開始估計

相關文章
相關標籤/搜索