limit floats to two digits in lab3
This commit is contained in:
+9
-3
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user