I just ran this on my instance of MySQL 5.5.30:
mysql> create table mytable (source char(1), target char(1), weight float);
mysql> insert into mytable values
-> ('x','y',0.2),
-> ('x','y',0.2),
-> ('z','a',0.5);
mysql> SELECT source, target, sum(weight) as weight2
-> FROM mytable
-> GROUP BY source, target;
+--------+--------+--------------------+
| source | target | weight2 |
+--------+--------+--------------------+
| x | y | 0.4000000059604645 |
| z | a | 0.5 |
+--------+--------+--------------------+
MySQL does not do rounding up to 1 as you describe. All I can guess is that you rounded up the values as you inserted them. I would recommend double-checking the data without doing a SUM() or GROUP BY, to see what the values are.
You may notice that in my output above, the SUM on the first row is not exactly 0.4, but instead it's a floating-point value near 0.4. You should probably not use FLOAT if you are concerned about rounding errors.
Read What Every Computer Scientist Should Know About Floating-Point Arithmetic, by David Goldberg.
Or a shorter treatment of this issue in the MySQL manual: Problems with Floating-Point Values.