Spaces:
Sleeping
Sleeping
| """Форматирование дробей""" | |
| from fractions import Fraction | |
| from typing import Union | |
| class FractionFormatter: | |
| """Форматирование дробей для вывода""" | |
| 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}" | |
| 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) |