Так устроены float и double: они двоичные, и в них точно представляются только числа вида k·2−n. 0,4 не таково, у него в знаменателе пятёрка.
Для большинства инженерных расчётов и игр это нормально. А вот если надо так, как подсчитал бы бухгалтер на бумаге (например, пишете калькулятор) — работайте с десятичным длинным.