One table:
items(id, price)
Has one row:
id: 1, price: 565.8
SELECT price FROM items
gives 565.8
SELECT SUM(price) FROM items
gives 565.799987792969
instead of 565.8
which I'd expect.
Where does the 565.799987792969
come from?
You can use the ROUND or FORMAT function: SELECT ROUND(SUM(price), 2) FROM items; Alternatively you can specify precision when defining a column, e.g. FLOAT(5,2) . Thanks!
Python sum of floats Output: 7.0 If you want to add floating point values with extended precision, you can use math. fsum() function.
float is a numeric data type and it can be used in SUM(). Here's what I used to test. Luis C.
You can use the ROUND or FORMAT function:
SELECT ROUND(SUM(price), 2) FROM items;
Alternatively you can specify precision when defining a column, e.g. FLOAT(5,2)
.
I'm not sure what version you are using, but it sounds like this link describes what you are experiencing.
From the link:
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.
Floating point numbers are stored as approximate values; if you are storing a price, you are better off using a decimal datatype which stores precise values.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With