mysql中float型別使用總結

2022-06-14 04:00:11 字數 1458 閱讀 7141

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

下面使用分析,

首先建立測試表

create

table

`customer` (

`id`

int(11) not

null

auto_increment,

`name`

varchar(45) default

null

, `age`

int(11) default

null

, `jinqian`

float(5,2)

default

null,

primary

key(`id`)

) engine

=myisam auto_increment=

11111112

default charset=utf8;

m表示的是最大長度,d表示的顯示的小數字數。

例如上面的sql裡:float(5,2) 表示:這個浮點數最大長度為5,也就是五位,然後小數部分為2位,至於儲存範圍,取決於你是否定義了無符號。

無符號的話,最小是0.0 最大能儲存到99999.9,如果有符號的話,範圍是:-99999.9至99999.9。

預設大小為24位數字,精度大約7位數字(經測試為6位),當設定m大小大於24時,自動轉換為double型別;同時設定m和d時不進行自動轉換。

insert

into customer (id,name,age,jinqian) values (111111111,'

uu',15,90.012

);insert

into customer (id,name,age,jinqian) values (1111111111,'

uu',15,90.018);

上面兩個分別被儲存為

insert

into customer (id,name,age,jinqian) values (1,'

uu',15,90.0

);insert

into customer (id,name,age,jinqian) values (11,'

uu',15,90.00);

上面兩個分別被儲存為

從上面的分析,我們可以得出以下結論:

1、浮點數存在誤差問題;

2、對貨幣等對精度敏感的資料,應該用定點數表示或儲存;

3、程式設計中,如果用到浮點數,要特別注意誤差問題,並盡量避免做浮點數比較;

4、要注意浮點數中一些特殊值的處理

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

在mysql中,字段型別為float的字段,如果不指定float的長度和小數點位數,要根據float欄位的值精確查詢,結果會是空 原因是在mysql中,float是浮點數,mysql儲存的時候是近似值,所以用精確查詢無法匹配 但可以用like去匹配。如果只用到mysql資料庫,不需要多庫關聯,針對小...

Java中float型別精度問題

今天發現了乙個小的問題,在網上找了說的不多,在這記錄下來方便自己和比人解決自己的問題吧。片段 1unit double.valueof actionutils.getbillingtransformunit request 取出換算單位1000.0 2svt curvesegment.getendv...

Java中float型別精度問題

今天發現了乙個小的問題,在網上找了說的不多,在這記錄下來方便自己和比人解決自己的問題吧。片段 1unit double.valueof actionutils.getbillingtransformunit request 取出換算單位1000.0 2svt curvesegment.getendv...