limit floats to two digits in lab3
This commit is contained in:
+9
-3
@@ -1,4 +1,5 @@
|
|||||||
import math
|
import math
|
||||||
|
from decimal import Decimal, InvalidOperation
|
||||||
|
|
||||||
|
|
||||||
class Worker:
|
class Worker:
|
||||||
@@ -47,6 +48,11 @@ class Worker:
|
|||||||
raise ValueError("Оклад должен быть числом")
|
raise ValueError("Оклад должен быть числом")
|
||||||
if not math.isfinite(salary):
|
if not math.isfinite(salary):
|
||||||
raise ValueError("Оклад не может быть NaN или бесконечностью")
|
raise ValueError("Оклад не может быть NaN или бесконечностью")
|
||||||
|
|
||||||
|
salary_decimal = Decimal(str(salary))
|
||||||
|
if salary_decimal.as_tuple().exponent < -2:
|
||||||
|
raise ValueError("Оклад должен содержать не более 2 знаков после запятой")
|
||||||
|
|
||||||
if salary < 1000:
|
if salary < 1000:
|
||||||
raise ValueError("Оклад слишком маленький (<1000)")
|
raise ValueError("Оклад слишком маленький (<1000)")
|
||||||
if salary > 10_000_000:
|
if salary > 10_000_000:
|
||||||
@@ -91,13 +97,13 @@ def input_salary() -> float | None:
|
|||||||
while True:
|
while True:
|
||||||
salary_str = input("Введите оклад: ").strip().replace(",", ".")
|
salary_str = input("Введите оклад: ").strip().replace(",", ".")
|
||||||
try:
|
try:
|
||||||
salary = float(salary_str)
|
salary_decimal = Decimal(salary_str)
|
||||||
except ValueError:
|
except InvalidOperation:
|
||||||
print("Ошибка: оклад должен быть числом")
|
print("Ошибка: оклад должен быть числом")
|
||||||
continue
|
continue
|
||||||
|
|
||||||
try:
|
try:
|
||||||
return Worker.validate_salary(salary)
|
return Worker.validate_salary(float(salary_decimal))
|
||||||
except ValueError as e:
|
except ValueError as e:
|
||||||
print("Ошибка:", e)
|
print("Ошибка:", e)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user