2012-05-08 1 views
8

Если я, например, х = 40 Я хочу, чтобы следующий результат:Python строка интерполяции: показывать только необходимые знаков после запятой

40" 

При х = 2.5 результат должен быть как ...

2.5" 

Так что я в основном хочу отформатировать не более одного десятичного знака. Я в настоящее время использую это:

"{0:0.1f}\"".format(x, 1) 

Но это показывает всегда точно один знак после запятой, что не совсем то, что я хочу ...

+0

Что должно случиться с -0.05? –

+0

Вы хотите округлить или усечь конечные цифры? – prelic

ответ

9

Одним из вариантов является чем-то вроде

"{0}\"".format(str(round(x, 1) if x % 1 else int(x))) 

, который будет отображаться x как целое число, если нет дробной части. Вероятно, есть лучший способ сделать это.

+0

Большое вам спасибо! :) – dom0

+0

Без проблем :) Рад, что помогает. Хотя любопытно узнать, есть ли у кого-то еще более чистый способ сделать это. –

+0

Что такое второй аргумент 'format (...)' for? (здесь: 1) – lajarre

3

Может быть, не обязательно полностью чистое решение, но я думаю, по крайней мере, немного более четко:

"{1:0.{0}f}\"".format(int(not float(x).is_integer()), x) 

, которые могут быть заменены на более загадочным (на основе Майкл MIOR округление идеи):

"{1:0.{0}f}\"".format(int(x % 1 > 0), x) 

, если вы предпочитаете короткие выражения (менее pythonic).

+0

На этот раз я вижу реальную полезность 'format'. И вторая версия превосходит меня (очиститель) – lajarre

4

Это можно использовать повторно, может быть использован на str, float или int, и преобразует '' в 0:

def minimalNumber(x): 
    if type(x) is str: 
     if x == '': 
      x = 0 
    f = float(x) 
    if f.is_integer(): 
     return int(f) 
    else: 
     return f 

Использование с:

print "{}\"".format(minimalNumber(x)) 

Пример:

x = 2.2 
print "{}\"".format(minimalNumber(x)) 
x = 2.0 
print "{}\"".format(minimalNumber(x)) 

выходы:

2.2" 
2" 
+1

Возможно, вы захотите использовать 'float (x) .is_integer()', чтобы использовать целые числа. ('is_integer' не определен для целых чисел) –

+0

Согласовано. Спасибо. –

Смежные вопросы