diff --git a/lab3/main.py b/lab3/main.py index 35e894a..293f2ef 100644 --- a/lab3/main.py +++ b/lab3/main.py @@ -1,4 +1,5 @@ import math +from decimal import Decimal, InvalidOperation class Worker: @@ -47,6 +48,11 @@ class Worker: raise ValueError("Оклад должен быть числом") if not math.isfinite(salary): raise ValueError("Оклад не может быть NaN или бесконечностью") + + salary_decimal = Decimal(str(salary)) + if salary_decimal.as_tuple().exponent < -2: + raise ValueError("Оклад должен содержать не более 2 знаков после запятой") + if salary < 1000: raise ValueError("Оклад слишком маленький (<1000)") if salary > 10_000_000: @@ -91,13 +97,13 @@ def input_salary() -> float | None: while True: salary_str = input("Введите оклад: ").strip().replace(",", ".") try: - salary = float(salary_str) - except ValueError: + salary_decimal = Decimal(salary_str) + except InvalidOperation: print("Ошибка: оклад должен быть числом") continue try: - return Worker.validate_salary(salary) + return Worker.validate_salary(float(salary_decimal)) except ValueError as e: print("Ошибка:", e)