Python, вывести все числа с плавающей запятой в 2 десятичных знака в выводе - PullRequest
58 голосов
/ 16 января 2010

Мне нужно вывести 4 различных числа с плавающей запятой с двумя десятичными знаками.

Вот что у меня есть:

print '%.2f' % var1,'kg =','%.2f' % var2,'lb =','%.2f' % var3,'gal =','%.2f' % var4,'l'

Что очень нечисто и плохо выглядит. Есть ли способ сделать что-либо с плавающей точкой в ​​этом выражении "% .2f"?

Примечание. Использование Python 2.6.

Ответы [ 7 ]

72 голосов
/ 16 января 2010

Ну, я бы по крайней мере очистил это следующим образом:

print "%.2f kg = %.2f lb = %.2f gal = %.2f l" % (var1, var2, var3, var4)
25 голосов
/ 16 января 2010

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

twodecimals = ["%.2f" % v for v in vars]

В качестве альтернативы, вы также можете распечатать единицы измерения, как у вас в вопросе:

vars = [0, 1, 2, 3] # just some example values
units = ['kg', 'lb', 'gal', 'l']
delimiter = ', ' # or however you want the values separated

print delimiter.join(["%.2f %s" % (v,u) for v,u in zip(vars, units)])
Out[189]: '0.00 kg, 1.00 lb, 2.00 gal, 3.00 l'

Второй способ позволяет легко изменять разделитель (табуляция, пробелы, новые строки и т. Д.) В соответствии с вашими потребностями;разделитель также может быть аргументом функции вместо того, чтобы быть жестко закодированным.

Редактировать: Чтобы использовать синтаксис 'name = value', просто измените поэлементную операцию в пределах понимания списка:

print delimiter.join(["%s = %.2f" % (u,v) for v,u in zip(vars, units)])
Out[190]: 'kg = 0.00, lb = 1.00, gal = 2.00, l = 3.00'
21 голосов
/ 24 марта 2016

Синтаксис строки формата.

https://docs.python.org/3/library/string.html#formatstrings

from math import pi
var1, var2, var3, var4 = pi, pi*2, pi*3, pi*4
'{:0.2f}, kg={:0.2f}, lb={:0.2f}, gal={:0.2f}'.format(var1, var2, var3, var4)

Вывод будет:

'3.14, kg=6.28, lb=9.42, gal=12.57'
7 голосов
/ 16 января 2010

Если вы ищете читабельность, я считаю, что это тот код:

print '%(kg).2f kg = %(lb).2f lb = %(gal).2f gal = %(l).2f l' % {
    'kg': var1,
    'lb': var2,
    'gal': var3,
    'l': var4,
}
5 голосов
/ 14 июня 2012

Я только что обнаружил функцию округления - она ​​есть в Python 2.7, не уверен насчет 2.6. Он принимает число с плавающей точкой и число dps в качестве аргументов, поэтому round (22.55555, 2) дает результат 22.56

2 голосов
/ 26 марта 2019

Если вы хотите, чтобы операция печати автоматически изменяла числа с плавающей запятой, чтобы отображались только 2 десятичных знака, подумайте о написании функции, которая заменит «печать». Например:

def fp(*args):  # fp means 'floating print'
    tmps = []
    for arg in args:
        if type(arg) is float: arg = round(arg, 2)  # transform only floats
        tmps.append(str(arg))
    print(" ".join(tmps)

Используйте fp () вместо печати ...

fp("PI is", 3.14159) ... вместо ... print "PI is", 3.14159

1 голос
/ 16 января 2010

Не так, как вы хотите это написать, нет. Один из принципов разработки Python - «Явное лучше, чем неявное» (см. import this). Это означает, что лучше описать, что вы хотите, а не иметь формат вывода, зависящий от каких-либо глобальных настроек форматирования или чего-то еще. Конечно, вы можете отформатировать ваш код по-другому, чтобы он выглядел лучше:

print         '%.2f' % var1, \
      'kg =' ,'%.2f' % var2, \
      'lb =' ,'%.2f' % var3, \
      'gal =','%.2f' % var4, \
      'l'
...