所以我运行的是MySQL 5.1.4版本,我试图通过四舍五入的值来选择distinct,它的工作效果很好,只是它将12.5之类的数字四舍五进到12,而不是13。我尝试过的列都是double类型。我做了一些研究,发现默认行为是将一半四舍五入,所以我想知道是否有一些设置或参数需要更改,或者这只是坏了?
以下是我的查询供参考:选择DISTINCT ROUND(radius)作为来自arch
的半径,其中radius!=''按radius
ASC 订购
请参阅此内容。将radius
列转换为DECIMAL
应该可以解决这个问题。
http://dev.mysql.com/doc/refman/5.1/en/precision-math-rounding.html
半圆形规则只适用于精确的数字(即整数和小数),对你来说,加倍的行为取决于底层的C库。
我怀疑您将不得不将值转换为DECIMAL才能获得所需的四舍五入。
在MySQL中,对于精确值类型(DECIMAL、INT),采用上半舍入(因此12.5
舍入为13
)。
对于近似类型(FLOAT、DOUBLE),MySQL将通常使用四舍五入,甚至也称为银行家四入(12.5
舍入到12
,而13.5
舍入到14
)。
为了解决这个问题,可以在四舍五入之前将0.5
添加到数字中,或者将近似值类型转换为DECIMAL。
SELECT DISTINCT ROUND(radius+0.1) as radius FROM arch WHERE radius != '' ORDER BY radius ASC
如果需要,可以进一步减少修饰符。