Что с точностью float?
Получается float не надёжен?
Смотря кому, когда и как. Всё зависит от того, какая точность важна в конкретной задаче. Деньги на нем не считают, но для большого круга задач этой точности вполне хватает, а эффективность кода с double гораздо выше, чем decimal.float нужен лишь затем, что этот тип занимает вдвое меньше памяти, чем double. Где-то это может сыграть решающую роль.
ЗЫ В конкретной ситуации вас спасёт Math.Round
double тоже работает не так как вы ожидаете - а вся проблема в том, что вы не ознакомились с спецификацией языка, типов данных, как они хранятся в памяти. Иммено с этого нужно начать.