"""Форматирование дробей""" from fractions import Fraction from typing import Union class FractionFormatter: """Форматирование дробей для вывода""" @staticmethod def format_fraction(fraction: Union[Fraction, float]) -> str: """ Форматирование дроби в красивую строку Аргументы: fraction: дробь или число Возвращает: str: отформатированная строка """ if isinstance(fraction, float): fraction = Fraction(fraction).limit_denominator() if fraction.denominator == 1: return str(fraction.numerator) if fraction.numerator < fraction.denominator: return f"{fraction.numerator}/{fraction.denominator}" whole = fraction.numerator // fraction.denominator remainder = fraction.numerator % fraction.denominator if remainder == 0: return str(whole) else: return f"{whole} {remainder}/{fraction.denominator}" @staticmethod def decimal_to_fraction(decimal: float, max_denominator: int = 1000) -> str: """ Преобразование десятичной дроби в обыкновенную Аргументы: decimal: десятичная дробь max_denominator: максимальный знаменатель Возвращает: str: обыкновенная дробь """ fraction = Fraction(decimal).limit_denominator(max_denominator) return FractionFormatter.format_fraction(fraction)