天天看點

Mysql | round對于精确值和近似值的處理

部落格引用處(以下内容在原有部落格基礎上進行補充或更改,謝謝這些大牛的部落格指導):

mysql round對于精确值和近似值的處理

遇到個問題

預期的結果是,round 的結果是3,可看下圖,有個結果是2

Mysql | round對于精确值和近似值的處理

查詢了官網的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,不會進位。

繼續閱讀