Ваш язык не сломан, он выполняет математику с плавающей запятой. Компьютеры изначально могут хранить только целые числа, поэтому им нужен какой-то способ представления десятичных чисел. Это представление не совсем точное. Вот почему чаще всего 0.1 + 0.2 != 0.3.
Почему это происходит?
На самом деле это довольно интересно. Когда у вас есть система с основанием 10 (например, наша), она может выражать только дроби, в которых используется простой множитель основания. Простые множители числа 10 равны 2 и 5. Таким образом, 1/2, 1/4, 1/5, 1/8 и 1/10 могут быть четко выражены, поскольку все знаменатели используют простые множители числа 10. Напротив, 1 /3, 1/6, 1/7 и 1/9 — повторяющиеся десятичные числа, потому что в их знаменателях используется простой множитель 3 или 7.
В двоичном формате (или с основанием 2) единственным простым делителем является 2, поэтому вы можете точно выразить только те дроби, знаменатель которых имеет только 2 в качестве простого делителя. В двоичном формате 1/2, 1/4, 1/8 будут четко выражены в виде десятичных дробей, а 1/5 или 1/10 будут повторяющимися десятичными дробями. Таким образом, 0,1 и 0,2 (1/10 и 1/5), будучи чистыми десятичными знаками в системе с основанием 10, являются повторяющимися десятичными знаками в системе с основанием 2, которую использует компьютер. Когда вы выполняете математику с этими повторяющимися десятичными числами, вы получаете остатки, которые переносятся, когда вы конвертируете число с основанием 2 (двоичное) компьютера в более удобочитаемое представление с основанием 10.