如何显示带有两位小数的浮点数?

231

我有一个函数接受浮点数参数(通常是只有一位有效数字的整数或小数),我需要将值输出为带有两位小数的字符串(5→5.00,5.5→5.50等)。在Python中我该如何做?

13个回答

378

由于这篇文章可能要存在一段时间,让我们也指出Python 3语法:

"{:.2f}".format(5)

27
为了完整起见,如果小数位数是可变的,例如 d=3,则语法为 "{:.{}f}".format(5, d) - jurajb

200
您可以使用字符串格式化符号来实现这一点:
>>> '%.2f' % 1.234
'1.23'
>>> '%.2f' % 5.0
'5.00'

这个操作符的结果是一个字符串,因此您可以将其存储在一个变量中,打印等。


将它再次转换为浮点数是否是一个好主意,例如:float('%.2f' % 5.0) - alper
@alper 这完全取决于你需要它做什么...如果是打印文本,字符串就可以了。 - toonarmycaptain
如果最终目标是一个float,你可以跳过中间的字符串,直接使用round(myfloat, 2)float('%.2f' % 5.0)是完全没有意义的(字符串添加了一个零,然后解析回float会丢弃它(因为float没有额外的尾随零的概念)。 - ShadowRanger

153

f-string格式化:

这是Python 3.6中的新功能 - 字符串用引号括起来,像普通字符串一样,在前面添加f'...,与原始字符串r'...类似。然后,您可以在大括号中放置任何想要放入字符串中的变量、数字等内容:f'某个字符串文本,其中包含{variable}或{number}' - Python会像以前的字符串格式化方法一样进行求值,但此方法更易读。

>>> foobar = 3.141592
>>> print(f'My number is {foobar:.2f} - look at the nice rounding!')

My number is 3.14 - look at the nice rounding!

在这个例子中,我们使用类似于以前的字符串格式化方法的方式对小数位进行格式化

NB foobar 可以是数字、变量,甚至是表达式例如f'{3*my_func(3.14):02f}'

未来,在新代码中,我更喜欢使用f-strings而不是常见的%s或str.format()方法,因为f-strings可以更易读,并且通常会更快速


1
如果小数位是变量,例如 d=3,则语法为 f'My number is {foobar:.{d}f}' - 如 @jurajb 所述。 - starriet
你说得对。我从未考虑过这一点。它也可以是 f'My number is {foobar:.{d}{format}}',其中 format 可以是 efgn - toonarmycaptain

28

字符串格式化:

a = 6.789809823
print('%.2f' %a)

print ("{0:.2f}".format(a)) 

可以使用Round函数:

print(round(a, 2))

round() 的好处是,我们可以将结果存储到另一个变量中,并将其用于其他用途。

b = round(a, 2)
print(b)

使用round()函数 - 主要用于显示目的。


7
“Downvote for round” 的意思是对使用“round”函数的投反对票,因为它不应仅用于显示目的。请注意,这里只是翻译内容,不包括解释或其他非翻译部分。 - wim
2
@wim 我尊重您的评论,但这些答案只是为了满足某人的需求。 - Debashis Sahoo
5
@debaonline4u wim 是正确的。 round(5.0001, 2) -> 5.0,而不是 '5.00' - wjandrea

12

字符串格式化:

print "%.2f" % 5

1
但是所有这些都是字符串,所以我无法对它们进行任何数学运算。 - itsaruns
@itsaruns 如果您只需要对它们执行数学运算,则添加空的小数位不会有任何影响。您可能正在寻找 math.floormath.ceilround - Steen Schütt

10

如果您实际上想要改变数字本身而不仅仅是以不同的方式显示它,可以使用format()方法

将其格式化为2位小数:

format(value, '.2f')
例子:
>>> format(5.00000, '.2f')
'5.00'

8

使用Python字符串格式化。

>>> "%0.2f" % 3
'3.00'

7
在Python 3中
print(f"{number:.2f}")

一个更短的格式化方法。

此内容已在四年前的这个答案中讨论过。 - ShadowRanger

5

Python 3的最短语法:

n = 5
print(f'{n:.2f}')

1
已经在2年前的这个答案中涵盖了。 - wjandrea

-1

我知道这是一个老问题,但我自己也在苦苦寻找答案。以下是我想到的:

Python 3:

>>> num_dict = {'num': 0.123, 'num2': 0.127}
>>> "{0[num]:.2f}_{0[num2]:.2f}".format(num_dict) 
0.12_0.13

5
你好,欢迎来到 Stack Overflow。当回答一个已经有很多答案的问题时,请确保加入一些额外的见解,解释你所提供的回答为什么具有实质性意义,而不是简单地重复原始发布者所已经审核过的内容。这在“仅代码”的答案中尤其重要,比如你提供的那个答案。 - chb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接