Нет необходимости использовать петлю грубой силы, если вы понимаете математику за ней. Вы можете вычислить степень 10, необходимую для того, чтобы сначала сделать данное число целым, вычислив его по показателю числа, а затем вычислить наименьшие общие множители между числом и вышеупомянутой степенью 10, разделив число с наибольшим общим делителем двух. :
from math import gcd
from decimal import Decimal
def whole_multiple(n):
power = 10 ** -n.as_tuple().exponent
n *= power
return n // gcd(int(n), power)
, поэтому:
whole_multiple(Decimal('-4.4'))
возвращает:
-22
Обратите внимание, что вы должны передать в функцию объект decimal.Decimal
, чтобы онрассчитать показатель степени и избежать ошибок аппроксимации с плавающей точкой.