Я думаю, что это самый питонический способ решения вашей проблемы.Попробуйте,
>>> import re
>>>
>>> float_val = 11.0000123456789
>>> keep_places = 4
>>>
>>> regEX = f'[0-9]+\.[0]+{"[0-9]" * keep_places}'
>>> expected_val = re.search(regEX, str(float_val)).group()
>>>
>>> print(expected_val)
'11.00001234'
Самый простой способ - создать Операции с регулярными выражениями , и именно так я использую его для решения вашего вопроса.Давайте разберем его на 4 части.
[0-9]+
\.
[0]+
[0-9] * keep_places
(1).[0-9]
означает выбор только одной цифры от 0 до 9. Нам нужно несколько цифр перед десятичной точкой.Вот почему мы добавляем [0-9]+
.Если перед десятичной запятой у вас нет целых чисел, то добавьте *
вместо +
, чтобы проверить ноль или более вхождений.Если вы используете +
, значит, вы должны иметь одно или несколько значений.
(2)..
эта точка является специальным символом для выбора любого символа, кроме символа новой строки в данной строке.Нам нужно захватить десятичную точку, которая также является точкой.Если в нашей строке есть такие специальные символы (в нашем случае десятичная точка), мы используем \
для соответствия этим символам.Вот почему мы используем \.
, теперь он может соответствовать нашей десятичной точке.
(3).[0]+
, это будет соответствовать всем нулям в нашей строке.
(4).[0-9] * keep_places
, это просто умножение строк.Для этого вопроса keep_places
равно 4
, что означает, что мы получаем такой вид вывода [0-9][0-9][0-9][0-9]
.Но в Операциях регулярного выражения он выбирает только четыре цифры, каждая из которых находится в диапазоне от 0 до 9. Еще одна вещь, для этого вопроса не имеет значения, используете ли вы [0-9]
или [1-9]
.Поскольку мы уже записываем нули, он начинает находить другие целые числа из 1
.
Если вы напечатаете regEX
, все вместе вы увидите [0-9]+\.[0]+[0-9][0-9][0-9][0-9]
строку типа.Он соответствует только типу <any_number><dot><all_zeros_before_the__non_zero_integer><4_digit_after_last_zero>
.Вы можете проверить это выражение онлайн .