MYSQL使用float型別精確查詢結果為空

2021-08-16 09:36:30 字數 2045 閱讀 7464

在mysql中,字段型別為float的字段,如果不指定float的長度和小數點位數,要根據float欄位的值精確查詢,結果會是空;

原因是在mysql中,float是浮點數,

mysql儲存的時候是近似值,所以用精確查詢無法匹配;但可以用like去匹配。

如果只用到mysql資料庫,不需要多庫關聯,針對小數型別的字段,可以使用decimal欄位型別,decimal資料型別最多可儲存 38 個數字,它儲存了乙個準確(精確)的數字表達法,不儲存值的近似值。

也可以在建立欄位時指定float的長度和小數點位數。

這樣指定小數點後的長度後 就能搜到值了。如下

`is_ordered` tinyint(1) not null default '0' comment '當天此房間是否被預定',

primary key  (`id`),

key `id` (`id`),

key `goods_attr_id` (`goods_attr_id`),

key `starttime` (`starttime`),

key `endtime` (`endtime`),

key `title` (`title`)

) engine=myisam auto_increment=10261 default charset=utf8

create table `calendar` (

`id` int(11) not null auto_increment,

`title` float(20,2) default null,

`starttime` int(11) not null,

`endtime` int(11) default null,

`allday` tinyint(1) not null default '0',

`color` varchar(20) default null,

`goods_attr_id` int(11) not null default '0',

`is_ordered` tinyint(1) not null default '0' comment '當天此房間是否被預定',

primary key  (`id`),

key `id` (`id`),

key `goods_attr_id` (`goods_attr_id`),

key `starttime` (`starttime`),

key `endtime` (`endtime`),

key `title` (`title`)

) engine=myisam auto_increment=10261 default charset=utf8

select * from calendar where title ='1.11'     #因為上面設計的是浮點型的,所以這樣搜不到,,只能搜 title 是字元型的。

select * from calendar where title =1.11       這樣才可以

where 後的比較型別。

mysql中float型別使用總結

對於單精度浮點數float 當資料範圍在 131072 65536 2 以內的時候,float資料精度是正確的,但是超出這個範圍的資料就不穩定,沒有發現有相關的引數設定建議 將float改成double或者decimal,兩者的差別是double是浮點計算,decimal是定點計算,會得到更精確的資...

float型別解析

浮點型變數在計算機記憶體中占用4位元組 byte 即32 bit。遵循ieee 754格式標準。乙個浮點數由2部分組成 底數m 和 指數e。mantissa 2exponent 注意,公式中的mantissa 和 exponent使用二進位制表示 底數部分 使用 進製數來表示此浮點數的實際值。指數部...

Mysql的float型別造成的困擾總結

因為換了工作正在學習使用mysql,今天領導提出了乙個問題,如下 x列是累加值,a列是每日新增值,那麼x2應該是x1 a2,而且儲存過程裡也是這樣計算的。可是奇怪的是x2的值卻總是和正確值 2396116766 有一定的差異。於是我手工進行了update,但是沒有辦法,資料永遠是 239611673...