MySQL round(x,1)返回0.0和-0.0

时间:2012-11-01 22:46:56

标签: mysql rounding

告诉我两个零是否有意义:

select x, count(1) from (select round(rand()-0.5,1) x from tab) t group by x;
+------+----------+
| x    | count(1) |
+------+----------+
| -0.5 |     1830 |
| -0.4 |     3726 |
| -0.3 |     3753 |
| -0.2 |     3835 |
| -0.1 |     3828 |
|  0.0 |     1909 |
| -0.0 |     1889 |
|  0.1 |     3831 |
|  0.2 |     3753 |
|  0.3 |     3793 |
|  0.4 |     3690 |
|  0.5 |     1887 |
+------+----------+

有一个解决方法(强制转换为十进制(10,1))但我很好奇圆()被破坏了。我正在使用MySQL 5.1

1 个答案:

答案 0 :(得分:5)

IEEE浮点标准有两个零:正数和负数。圆形()在将负值舍入为0时返回负零是完全正常的。

通常,负零被视为等于零,但看起来在您的平台上,MySQL认为它们是不同的。

更新: MySQL,至少在5.5中,似乎认为=的正负0等于GROUP BY

您可以向值添加零以将负零转换为正值而不更改其他值。例如,

select x, count(1) from (select 0+round(rand()-0.5,1) x from tab) t group by x;