Algumas demonstrações simples do problema com números float:
0.1 + 0.2 === 0.3 // False 0.1 + 0.7 == 0.8 // False (0.1 + 0.2) + 0.3 === 0.1 + (0.2 + 0.3) // False 7*0.57 // 3.9899999999999998 7*0.68 // 4.760000000000001
Motivo do problema: Não existir possibilidade de representar certas frações decimais em notação/base binária seja em 32 ou 64 bits (principal modelo hoje). Algumas notações, por questões de dízima, seriam impossíveis de serem representadas até numa quantidade imensamente grande de bits.
Teste em sua linguagem de programação preferida e se divirta. A exceção são as linguagens que corrigiram este problema “herdado” de C.
Como dito acima, é uma limitação de ‘hardware’ + limitações matemáticas neste hardware.