Как отформатировать 1.3435434533e-8 в 1.34e-8 в python? Оставьте только две цифры. Метод round() округлит это число до нуля.






Вы можете сделать что-то вроде round(number, 10), что оставит вам 10 цифр после запятой. Поскольку вы сдвигаете точку на 8 (^-8), у вас остается два напечатанных десятичных знака.
это не сработает. «round» сохраняет полученное число как число с плавающей запятой и изменяет его значение. Обычная лучшая стратегия при округлении — это форматирование того, что вы представляете: когда число преобразуется в строку.
Я предполагал, что это только форматирование. print(round(a, 10)) работает нормально. Но я согласен, что ваше решение намного элегантнее, и я не знал о суффиксе g, так что спасибо за это!
Суффикс форматирования «g» на языке мини-формата строк, используемый как f-строками, так и методом .format, сделает это:
In [1]: a = 1.34434325435e-8
In [2]: a
Out[2]: 1.34434325435e-08
In [4]: f"{a:.03g}"
Out[4]: '1.34e-08'
# in contrast with:
In [5]: f"{a:.03f}"
Out[5]: '0.000'
Спасибо, это работает. Еще вопрос, можно ли превратить 1.34e-08 в 1.34e-8?
Не автоматически. :-( - это потребует дальнейших манипуляций со строкой, сгенерированной выше. Это можно сделать в довольно неясном выражении, вложенном 2 f-строки. (Я только вчера узнал, что это возможно): f"{'e'.join(str(int(p)) if i else p for i,p in enumerate(f'{a:.03g}'.split('e'))) }"
Просто хотел упомянуть, что это очень своеобразно, поскольку вам нужно знать показатель степени для каждого числа, которое вы хотите отформатировать таким образом. Я уверен, что есть лучшее решение.