MySQL ROUND函数使用round half down而不是half up

时间:2012-03-28 17:56:45

标签: mysql rounding

所以我正在运行MySQL版本5.1.4并且我试图通过舍入值选择distinct,并且它工作得很好,除了它将数字舍入为12.5到12而不是13。我尝试了这些列都是双重的。我做了一些研究,看到默认行为是将一半向上舍入,所以我想知道是否有一些我需要更改的设置或参数,或者这是否只是打破了?

这是我的查询供参考: SELECT DISTINCT ROUND(radius)as radius FROM arch WHERE radius!=''ORDER BY radius ASC

5 个答案:

答案 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