Смотря что вы имеете в виду под "так". Если вы про вычисления чисел с плавающей точкой, то это проблема не только JS, но и почти любого языка программирования.
Дело в том, что в компьютере мы не можем представить десятичную дробь в том виде, в котором мы с вами ее понимаем и видим. Для компьютера, который использует двоичную логику, эти значения хранятся в виде аж трех значений: знака, порядка и мантиссы. Соответственно, при сложении этих двух чисел появляется некая погрешность вычисления, которая во многих языках попросту отбрасывается.
Во многих языках программирования есть такое понятие, как машинный ноль или epsilon - некое значение, где отличие чисел считается несущественным и числа считаются равными. То есть сравнение происходит так Math.abs(a - b) < 0.00000001.
Очень простое объяснение, почему так происходит есть в руководстве по плавающим точкам. (eng)
Более сложное на хабре.