Так что вы можете просто использовать format
и указать, что вам нужно 20 знаков после запятой, но это будет довольно уродливо.
>>> format(2.3e-06, ".20f")
'0.00000230000000000000'
Но вы можете использовать эту строку, а затем очистить все нули с правой стороны, используя rstrip
>>> format(2.3e-06, ".20f").rstrip("0")
'0.0000023'
>>> format(2.3e-16, ".20f").rstrip("0")
'0.00000000000000023'
Тогда остается толькоВыясните, если число меньше 10 ^ -20, и если это так, просто распечатайте его, используя обычное экспоненциальное форматирование, которое Python все равно сделает.
def format_for_up_to_n_decimal_places(num, n_decimal_places):
if num < 10**-n_decimal_places:
return str(num)
else:
return format(num, ".{}f".format(n_decimal_places)).rstrip('0')
Пример:
>>> format_for_up_to_n_decimal_places(2.3e-6, 20)
'0.0000023'
>>> format_for_up_to_n_decimal_places(2.3e-50, 20)
'2.3e-50'