mysql round对于精确值和近似值的处理
转载出处:https://blog.****.net/luckfu/article/details/72956108
遇到个问题
预期的结果是,round 的结果是3,可看下图,有个结果是2
查询了官网的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,不会进位。