2014-09-24 85 views
1

我正在使用MySQL 服務器版本:5.6.20-1 + deb.sury.org〜trusty + 1-log - (Ubuntu)並且在計算小數時出現問題。這裏是我的情況:MySQL的十進制計算不一致

我有一個十進制字段的表DECIMAL(65, 24)。我需要它,因爲它包含貨幣數據。我也爲同一類型的不同貨幣(DECIMAL(65, 24))保留一個兌換比率,這樣我可以用其他貨幣的相同價格。這種比例通常很小,如0.000030769230769231000000

的問題出現了,當我試圖聚集一些的價格,當且僅當我把它寫這種方式:

SELECT SUM(price * conversion_rate), COUNT(DISTINCT some_field) 
FROM products 
GROUP BY some_other_field 

而問題是,結果並不一致!我的意思是當我重新運行查詢結果改變!通常它會在兩個案例之間變化,而且看起來是隨機的變化是相當大的,例如Case1 - Case2 = $7,025.13! (當然這取決於產品的價格和數量)。如果我省略DISTINCTCOUNT函數,問題就解決了。

和MySQL說this about decimal data-type

的decimal和numeric類型存儲精確的數值數據。使用這些 類型時,保留精確的精度非常重要,對於使用貨幣數據的示例 。

有沒有人有任何想法如何克服這個問題?

+0

什麼是數據類型的價格領域的? – Grice 2014-09-24 13:49:44

+0

兩者都是'DECIMAL(65,24)' – Mehran 2014-09-24 13:52:12

+1

顯示一些示例數據,以便我們可以嘗試重新提出您所詢問的內容。 – 2014-09-24 14:00:28

回答

1

我很抱歉我的匆忙問題。有一個錯誤,但它與MySQL或小數無關。我已經在MySQL的控制檯以及MySQL Workbench中測試了我的場景,並沒有發現任何不一致。所以我得出的結論是,問題依賴於PhpMyAdmin(或者在PHP中),我測試了我的第一個場景。但是如果使用PhpMyAdmin,測試用例仍然有效,結果將從一次運行變爲另一次(在上面解釋過的測試用例)在這樣一個艱苦的工作日之後讓我感到驚訝,導致了一個匆忙的問題。

phpMyAdmin的的版本:4.2.7deb0.1

PHP的版本:5.5.16-1 + deb.sury.org〜可信賴+ 1