3

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

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)),但我很好奇 round() 是否损坏。我正在使用 MySQL 5.1

4

1 回答 1

7

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

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

更新:至少在 5.5 中,MySQL 似乎认为正零和负零等于=,但对于GROUP BY.

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

select x, count(1) from (select 0+round(rand()-0.5,1) x from tab) t group by x;
于 2012-11-01T23:35:33.120 回答