2012-11-01 101 views
2

告訴我,如果這兩個零意義:MySQL的圓(X,1)返回0.0和-0.0

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

回答

5

IEEE浮點標準有兩個零:正值和負值。 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; 
+0

謝謝!你認爲這是一個應該修復的MySQL錯誤嗎? – iggy

+0

很難說,當然有些時候兩個零是平等的,有時候不是。您可以嘗試提交錯誤報告並查看他們的說法。 – Joni

+1

這是我提交的MySQL錯誤:[link](http://bugs.mysql.com/bug.php?id=67529) – iggy