2014-09-24 79 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