所以我正在运行MySQL版本5.1.4并且我试图通过舍入值选择distinct,并且它工作得很好,除了它将数字舍入为12.5到12而不是13。我尝试了这些列都是双重的。我做了一些研究,看到默认行为是将一半向上舍入,所以我想知道是否有一些我需要更改的设置或参数,或者这是否只是打破了?
这是我的查询供参考:
SELECT DISTINCT ROUND(radius)as radius FROM arch
WHERE radius!=''ORDER BY radius
ASC
答案 0 :(得分:2)
见this。将radius
列转换为DECIMAL
可以解决问题。
答案 1 :(得分:0)
http://dev.mysql.com/doc/refman/5.1/en/precision-math-rounding.html
半轮规则仅适用于精确数字(即整数和小数),对于你来说,双重行为取决于底层C库。
我怀疑你必须将值转换为DECIMAL以获得所需的舍入。
答案 2 :(得分:0)
在MySQL中,精确值类型(DECIMAL,INT)采用半向上舍入(所以12.5
轮到13
)。
对于近似类型(FLOAT,DOUBLE),MySQL将通常使用半轮甚至是银行家四舍五入(12.5
轮到12
,而13.5
轮到14
)。
要解决此问题,您可以在回合之前将0.5
添加到该数字,或将您的近似值类型转换为DECIMAL。
答案 3 :(得分:0)
SELECT DISTINCT ROUND(radius+0.1) as radius FROM arch WHERE radius != '' ORDER BY radius ASC
如果需要,也许可以进一步减少修饰符。
答案 4 :(得分:-2)
你想要的是CEILING http://dev.mysql.com/doc/refman/5.0/en/mathematical-functions.html
SELECT DISTINCT CEILING(radius) as radius FROM arch WHERE radius != '' ORDER BY radius ASC