Почему браузер неправильно умножает числа?
Эта "фишка" не только в браузере и JS, а в целом - в машинном вычислении. 
Есть даже интересный сайт, посвящённый этой проблеме, вот он 
Если взять, например 0.2 и 0.3, то константы 0.2 и 0.3 будут аппроксимированы до своих истинных значений. Получается, что ближайшее к 0.2 значение double оказывается больше рационального числа 0.2, но ближайшее к 0.3 значение double меньше рационального числа 0.3. Сумма 0.1 и 0.2 оказывается больше рационального числа 0.3, и следовательно не соответствует константам в коде.

0.1 + 0.2 // -> 0.30000000000000004
(0.1 + 0.2) === 0.3 // -> false
Потому что 0.0610 в двоичной системе представляется бесконечной дробью 0.0(00011110101110000101)2. И какую бы конечную запись этой дроби вы ни взяли, она всегда будет содержать ошибку округления.