對於單精度浮點數float: 當資料範圍在±131072(65536×2)以內的時候,float資料精度是正確的,但是超出這個範圍的資料就不穩定,沒有發現有相關的引數設定建議:將float改成double或者decimal,兩者的差別是double是浮點計算,decimal是定點計算,會得到更精確的資料。
下面使用分析,
首先建立測試表
createm表示的是最大長度,d表示的顯示的小數字數。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;
例如上面的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...