Mariadb
在浮點數據類型 MariaDB 10.4.8 上選擇結果不同
在 MariaDB 上
我有浮點數據類型的簡單表
CREATE TABLE `testatt` ( `id` int(11) NOT NULL AUTO_INCREMENT, `nilai` float DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=latin1
當我插入這樣的數據時
insert into testatt (nilai) values (6.83333)
然後我選擇
select * from testatt
結果變成
6.8333301544
這是正常的或需要更多配置。
我使用 MariaDB 10.4.8
FLOAT
,根據定義,包含大約 7 個有效數字。之後的任何數字都將是“垃圾”。同樣,DOUBLE
有大約 16 個有效數字的限制。6.83333000000000000000000 -- what you tried to insert 6.8333301544 -- what you got when displaying 1 234567xxxx -- counting the significant digits
這一切的原因是它
FLOAT
被定義為一個 24 位二進制數加上指數和符號。24 位只能保存 16M 不同的值。6.8333301544… 是封閉的可能 24 位值 6.83333。正如所指出的,您可以將其儲存在
DECIMAL(m,n) with n>=5 and m>=n+1
這可以準確地儲存 6.83333 而沒有任何損失。(它不儲存在“二進制”中。)
您暗示 10.4.8 與 10.4.5 不同;請提供更多細節。的定義
FLOAT
在 1980 年代初被標準化(參見 IEEE-754)。MySQL 和 MariaDB 只是簡單地使用了該標準。
6.83333
可能來自41/6
。這樣的商不能在FLOAT
或中精確表示DECIMAL
。課程:使用
FLOAT
或DOUBLE
進行近似測量(溫度、面積等)DECIMAL
用於金錢。