3

2つのゼロが意味をなすかどうか教えてください:

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 |
+------+----------+

回避策(decimal(10,1)としてキャスト)がありますが、round()が壊れているかどうか知りたいです。MySQL5.1を使用しています

4

1 に答える 1

7

IEEE浮動小数点標準には、正と負の2つのゼロがあります。負の値を0に切り上げるときに、round()が負のゼロを返すのはまったく正常です。

通常、負のゼロは正のゼロと同じように扱われますが、プラットフォーム上ではMySQLがそれらを区別していると見なしているように見えます。

更新: MySQLは、少なくとも5.5では、正と負のゼロはと等しいと見なしているようですが、とは=異なり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 に答える