task_generator / utils /fraction_formatter.py
reginafeles's picture
Upload 40 files
d2213a5 verified
"""Форматирование дробей"""
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)