2015-02-10 5 views
3

Я хотел бы выводить значения как {: f}, если они выше 0,001, скажем, иначе как {: e} (экспоненты).Как определить спецификатор формата по значению аргумента?

Интересно, могу ли я сделать это в одной строке форматирования строк, что не является условием на линии, которая на самом деле печатает, а внутри. Разрешены ли лямбда-выражения? (Примечание стороны: где они разрешены, на самом деле)

FTR, это моя строка вывода:

print("{:f}".format(my_float)) 
+0

вид ')' в конце – ForceBru

+3

Вы могли бы сделать что-то вроде: 'печати ((«{: F}», если my_float> 0.001 else "{: e}"). format (my_float)) ', но это выглядит неловко! – jonrsharpe

ответ

2

Я думаю, что я хотел бы использовать "{:g}". Это будет провал назад и вперед между экспоненциальной нотации и нормальным флоат обозначения в зависимости от значения:

>>> '{:g}'.format(0.001) 
'0.001' 
>>> '{:g}'.format(0.0000001) 
'1e-07' 

В отличие от "{:e}" который всегда экспоненциальный ...

>>> '{:e}'.format(0.001) 
'1.000000e-03' 
+0

'{: g}'. Format (0.0001) дает его как '0.0001' – thiruvenkadam

2

Добавление условия в формате один способ я мог подумать

>>> x = 0.0001276 
>>> '{:{type}}'.format(x, type='f' if x>0.001 else 'e') 
'1.276000e-04' 
>>> x = 0.01 
>>> '{:{type}}'.format(x, type='f' if x>0.001 else 'e') 
'0.010000' 

Это, по-моему, лучше, чем лямбда.

Покончить с, если еще, вы можете пойти с и или операцией

(x>0.01 and 'f') or 'e' 
Смежные вопросы