Ответ @ShadowRanger правильный.Значение «2.2» преобразуется в ближайшую двоичную дробь.И .as_integer_ratio()
возвращает эту двоичную дробь.Однако есть и другие близкие рациональные числа, которые приводят к тому же двоичному представлению при преобразовании в число с плавающей точкой.Можно найти более простую дробь, используя дерево Stern-Brocot .
gmpy2
имеет реализацию алгоритма Stern-Brocot и отображается как .as_simple_fraction()
.
>>> gmpy2.mpfr("2.2").as_integer_ratio()
(mpz(2476979795053773), mpz(1125899906842624))
>>> gmpy2.mpfr("2.2").as_simple_fraction()
mpq(11,5)