float 的資料格式是以近似值的方式而不是以確實的表示法儲存數字,也就是假設我們輸入100,但對浮點數來說有可能是99.9999999999999999998非常接近100,但不是真正的100。


float的坑

這個在一般使用下可能感受不出差異,但在某些特別的情況下就會出現預期之外的結果。

像是Aidec自己就遇到在SQL中使用SUM這個函數去計算加總,其正確結果應為0,但卻出現一個非常奇怪的數字。


1517364209346.jpg


解決之道

若要解決這個錯誤其實也很簡單,那就是不用使用float最為資料的儲存格式,而是改用decimal


使用decimal的話,資料儲存格式就會以精準的值,作為實際儲存值。假如我們儲存的資料整數長度最多8位數且有2個小數點,那我們可以設為 decimal(10,2)


格式範例


Decimal(p,s)


p:為總長度 (整數位數+小數點位數)

s:為小數點位數


範例

Decimal(4,3) => 9.999  

Decimal(6,2)=>999999.99

Decimal(10,2)=>99999999.99

如本篇文章對您有幫助的話,請按讚粉絲團或訂閱youtube頻道。

facebook粉絲團:https://www.facebook.com/aidectw/

youtube頻道:https://www.youtube.com/channel/UClGTLsGrMvGOl3tXoDQHQjg

如有任何問題,可到下方留言或到粉絲團與大家一起討論。


文章轉載或引用,請先告知並保留原文出處與連結!!3Q

原文連結:https://blog.aidec.tw/post/mysql-float-decimal