Измените количество нулей по умолчанию для автоматического преобразования в научную нотацию в python

#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