部落格引用處(以下内容在原有部落格基礎上進行補充或更改,謝謝這些大牛的部落格指導):
mysql round對于精确值和近似值的處理
遇到個問題
預期的結果是,round 的結果是3,可看下圖,有個結果是2
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIwczLcVmds92czlGZvwVP9EUTDZ0aRJkSwk0LcxGbpZ2LcBDM08CXlpXazRnbvZ2LcRlMMVDT2EWNvwFdu9mZvwVP9EVT2VjMYBTNXlVekdVW5plMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2LcRHelR3LcJzLctmch1mclRXY39jM3YDN0ATN3EzMxQDM4EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
查詢了官網的mysql round函數的說明。
1、對于精确值的處理,是按照四舍五入的原則
2、對于近似值,不管小數點後是啥,都取最接近的偶數
mysql-mathematical-functions-round
而mysql 對于數字類型的定義是差別對待的:
mysql number type (字段類型,按照字段類型走)
int和decimal是精确值
float和double是近似值
Ps:
但是如果字段為float或double,不想改字段類型但是要求結果準确,那麼就按下面的方式走:
ROUND(b.hamount / a.wamount + 0.00000001, 5) 後面加 0.00000001。
另外說明下:
TRUNCATE(x,y)函數直接截取值,并不進行四舍五入。比如小數為0.28,保留一位小數,那麼用TRUNCATE(x,y) 的話,結果就是0.2,不會進位。