1. 程式人生 > >使用Navicat存float型別的小數

使用Navicat存float型別的小數

問題描述

使用navicat儲存一個float型別的小數,新增欄位後,其他的保持預設設定。

clipboard.png

然後存一條資料,float型別的資料為129364.57。儲存後的結果:

clipboard.png

捨棄了小數部分,然後四捨五入為129365

然後又重新試了幾個其他的小數,發現都是這個情況。

猜測

1.聯想到以前學C語言的時候,不同資料型別所佔長度不同,所以就猜測可能是精度不夠了。

因為是二進位制,所以在儲存小數的時候只能有2的負n次冪這樣的相加得出的小數,所以我就試一下129364.25,依然不行,還是沒有小數部分,只有整數部分,並且同樣滿足四捨五入。

所以不是精度的問題。

2.既然沒有小數,是不是預設沒有小數部分呢。

然後重新設計表,發現果然小數部分為0,然後將其改為2:

clipboard.png

再重新測試:

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位的數字開始估計