Python,将所有浮点数打印到输出中的2位小数

时间:2010-01-15 22:15:31

标签: python floating-point string-formatting

我需要输出4个不同的浮点数到两位小数。

这就是我所拥有的:

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

这是非常不洁净的,看起来很糟糕。有没有办法在'%。2f'中进行任何浮动?

注意:使用Python 2.6。

7 个答案:

答案 0 :(得分:71)

好吧,我至少要把它清理干净如下:

print "%.2f kg = %.2f lb = %.2f gal = %.2f l" % (var1, var2, var3, var4)

答案 1 :(得分:25)

如果您只想将值转换为漂亮的字符串,请执行以下操作:

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'

答案 2 :(得分:20)

格式字符串语法。

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'

答案 3 :(得分:7)

如果您正在寻找可读性,我相信这就是代码:

print '%(kg).2f kg = %(lb).2f lb = %(gal).2f gal = %(l).2f l' % {
    'kg': var1,
    'lb': var2,
    'gal': var3,
    'l': var4,
}

答案 4 :(得分:5)

我刚刚发现了圆函数 - 它在Python 2.7中,不确定2.6。它需要一个浮点数和dps作为参数,因此round(22.55555,2)给出结果22.56。

答案 5 :(得分:2)

如果要使打印操作自动将浮点数更改为仅显示小数点后两位,请考虑编写一个函数来替换“打印”。例如:

$ADuser     = Get-ADUser $OBUID -Properties Manager
$ADemanager = $ADuser |
              Where-Object { $_.Manager } |
              Select-Object -Expand Manager |
              Get-ADUser |
              Select-Object -Expand SamAccountName

if ($ADemanager -ne $OBemanager) {
    $ADuser |
        Set-ADUser -Manager $OBemanager -PassThru |
        Get-ADUser -Properties Manager |
        Select Name, Manager
}

使用fp()代替打印...

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("PI is", 3.14159)

答案 6 :(得分:1)

不是直接以你想写的方式,不是。 Python的一个设计原则是“明确比隐含更好”(参见import this)。这意味着最好描述您想要的内容,而不是让输出格式依赖于某些全局格式设置或其他内容。您当然可以采用不同的方式格式化代码,使其看起来更好:

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