至少在MySQL v5.1.73(CentOS 6.6)中,MOD()函數返回一個僞造的結果......除非有人能夠解釋這實際上是正確的。MySQL MOD()已損壞:這是最好的選擇嗎?
mysql> select MOD(-385.4784399 ,1440);
+-------------------------+
| MOD(-385.4784399 ,1440) |
+-------------------------+
| -385.4784399 |
+-------------------------+
1 row in set (0.01 sec)
這是最好的選擇?
mysql> select -385.478439885319 - 1440 * FLOOR(-385.478439885319/1440);
+----------------------------------------------------------+
| -385.478439885319 - 1440 * FLOOR(-385.478439885319/1440) |
+----------------------------------------------------------+
| 1054.521560114681 |
+----------------------------------------------------------+
1 row in set (0.00 sec)
我認爲這樣也會起作用,但是要做一些簡單的事情還需要很長時間。
mysql> select MOD((MOD(-385.478439885319, 1440) + 1440), 1440);
+--------------------------------------------------+
| MOD((MOD(-385.478439885319, 1440) + 1440), 1440) |
+--------------------------------------------------+
| 1054.521560114681 |
+--------------------------------------------------+
1 row in set (0.00 sec)
它不會被破壞,除非有一些說明你可以指出它不符合要求。它在文檔中被定義爲一個餘數,沒有例子給出負的第一個參數。 – EJP
你期望什麼結果? MOD是模運算,並返回'-385.478439885319'除以'1440'的餘數。模運算的結果不能大於除數。 – Nicolai
這是基本的模塊化算術,我期待正確的答案......我甚至展示了正確的答案;我只是不確定這是最有效的方法。 – tlum