This is not a good way to store duration. Storing decimal seconds, minutes, hours is fine, but it should be to base 10, i.e. 1 hour 30 minutes, should be 1.5 hours, or 90 minutes, not 1.3 - What if someone inserts 1.7 into your table? It is also much simpler to add/subtract data stored in seconds/minutes, and to reformat as required.
Anyway, you can do the conversion using some fairly simple logic. The hours portion will just be the portion before the decimal, i.e. the integer part of the number, this can be obtained by rounding your number down - e.g. FLOOR(1.3)
= 1 hour. Then to get the number of minutes you need to extract the decimal part of the number and multiply by 100 - e.g. extract 0.3 from 1.3 and multiply this by 100 to get 30 minutes.
SELECT [Hours] = FLOOR(n),
[Minutes] = (n - FLOOR(n)) * 100,
TotalMinutes = (FLOOR(n) * 60) + (n - FLOOR(n)) * 100,
SummedMinutes = SUM((FLOOR(n) * 60) + (n - FLOOR(n)) * 100) OVER(),
SummedHours = SUM((FLOOR(n) * 60) + (n - FLOOR(n)) * 100) OVER() / 60.0
FROM (VALUES (3.4), (1.3), (4.2)) t (N);
Then if you need to convert 9.5 hours back to 9.3 (again, this is a terrible way of representing 9 hours 30 minutes) you would need to reverse the logic above, i.e. Total hours + (minutes / 100)
SELECT [Hours] = CAST(FLOOR(SummedMinutes / 60) AS FLOAT),
[Minutes] = SummedMinutes % 60,
OddFormat = CAST(FLOOR(SummedMinutes / 60) AS FLOAT) + (SummedMinutes % 60 / 100)
FROM ( SELECT SummedMinutes = SUM((FLOOR(n) * 60) + (n - FLOOR(n)) * 100)
FROM (VALUES (3.4), (1.3), (4.2)) t (N)
) AS t;
Example on SQL Fiddle