在mysql查询中我使用过
avg(column_name)
返回值12.50
但是如果我舍入到平均功能
ROUND(avg(column_name))
然后它返回值12
,但它必须是13
。我不知道为什么它会返回12
而不是13
如果我ROUND(12.50)
,则返回值“13”和avg(column_name)
,即12.50。当我做ROUND(avg(column_name))
时返回值“12”。我认为在这两种情况下输出都需要为“13”。
答案 0 :(得分:3)
http://dev.mysql.com/doc/refman/5.0/en/precision-math-rounding.html:
从MySQL 5.0.3开始,ROUND()根据使用以下规则 第一个参数的类型:
对于精确值数字,ROUND()使用“round half up”或“round” 最近的“规则:小于0.5或更大的部分的值 如果是正数或下一个整数,则向上舍入到下一个整数 如果为负则为整数(换句话说,它从零开始舍入。) 小于.5的小数部分的值向下舍入到下一个 如果为正则为整数,如果为负则为整数。
对于近似值数字,结果取决于C库。上 很多系统,这意味着ROUND()使用“round to even even” rule:具有任何小数部分的值四舍五入到最接近的偶数 整数。
以下示例显示精确和舍入的舍入方式有何不同 近似值:
mysql> SELECT ROUND(2.5), ROUND(25E-1);
+------------+--------------+
| ROUND(2.5) | ROUND(25E-1) |
+------------+--------------+
| 3 | 2 |
+------------+--------------+
答案 1 :(得分:0)
不确定这是否属于您的情况,但这是MySQL documentation
中的内容对于近似值数字,结果取决于C库。上 很多系统,这意味着ROUND()使用“round to even even” rule:具有任何小数部分的值四舍五入到最接近的偶数 整数。
答案 2 :(得分:0)
试试这个:
FLOOR(avg(column_name) + 0.5)
答案 3 :(得分:0)