2010-10-11 18 views
17

Bir tablo:
ürün (id, fiyat)kullanma SUM

bir satır içeriyor:
id: 1, fiyatı: 565,8

SELECT price FROM items565.8
SELECT SUM(price) FROM items verir yerine 565.799987792969 verir Beklediğim 565.8.

565.799987792969 nereden geliyor?

cevap

17

Kullandığınız sürümden emin değilim, ancak this link neye benzediğini anlatıyor. bağlantısından

:

Kayan noktalı sayılar
mysql> select * from aaa; 
+----+------------+------+ 
| id | month_year | cost | 
+----+------------+------+ 
| 1 | 2002-05-01 | 0.01 | 
| 2 | 2002-06-01 | 1.65 | 
| 3 | 2002-07-01 | 0.01 | 
| 4 | 2002-01-01 | 0.01 | 
+----+------------+------+ 

mysql> select id, sum(cost) from aaa group by id; 
+----+---------------------+ 
| id | sum(cost)   | 
+----+---------------------+ 
| 1 | 0.00999999977648258 | 
| 2 | 1.64999997615814 | 
| 3 | 0.00999999977648258 | 
| 4 | 0.00999999977648258 | 
+----+---------------------+ 

The SUM function changes 0.01 to 0.00999999977648258. 

yaklaşık değerler olarak saklanır; Bir fiyatı depolarsanız, kesin değerleri depolayan ondalık veri türü kullanmaktan daha iyidir.

7

Sen ROUND veya FORMAT işlevini kullanabilirsiniz: bir sütun tanımlarken

SELECT ROUND(SUM(price), 2) FROM items; 

Alternatif, örneğin hassas belirtebilirsiniz FLOAT(5,2).

+1

Teşekkürler! Bu yararlı ama soruya cevap vermiyor. –