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



所以我运行的是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

如果需要,可以进一步减少修饰符。

相关内容

  • 没有找到相关文章

最新更新