#python
Вопрос:
Python автоматически преобразует очень маленькие числа в научную нотацию. Есть ли способ глобально контролировать, когда следует использовать это преобразование, т. Е. Количество нулей после десятичного разделителя?
Например
print(0.01)
print(0.001)
print(0.00001)
приведет по умолчанию к
0.01
0.001
1e-5
Теперь я хочу установить глобальную опцию, подобную этой:
max_num_of_zeros=1
print(0.01)
print(0.001)
print(0.00001)
должно привести к
0.01
1e-3
1e-5
Ответ №1:
Как насчет переопределения print
с помощью пользовательской функции ? (Если вам нужно print
и вы не можете напрямую использовать новый вместо этого и просто изменить max_num_of_zeros
)
Я предполагаю, что это не ваша ожидаемая реализация (я не знаю, возможно ли это), но она дает ту же функциональность.
import builtins
from functools import partial
def my_print(item, max_num_of_zeros=None):
if not isinstance(item, float) or max_num_of_zeros is None:
builtins.print(item)
elif item < 0.1 ** (max_num_of_zeros 2):
builtins.print(f"{item:1.0e}")
else:
string = f"{item:.10f}".rstrip("0")
builtins.print(string)
тогда вы можете сделать
print = partial(my_print, max_num_of_zeros=1)
print(0.01)
print(0.001)
>>> 0.01
>>> 1e-03
print = partial(my_print, max_num_of_zeros=2)
print(0.01)
print(0.001)
print(0.00001)
>>> 0.01
>>> 0.001
>>> 1e-05
print = partial(my_print, max_num_of_zeros=5)
print(0.01)
print(0.001)
print(0.00001)
>>> 0.01
>>> 0.001
>>> 0.00001
# and to get back normal behavior
print = builtins.print