Spaces:
Sleeping
Sleeping
File size: 1,728 Bytes
d2213a5 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | """Форматирование дробей"""
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) |