在Python中格式化浮点数的方法

2,229 阅读4分钟

How to Format Float Values in Python

通过指定精度对浮点数进行格式化有助于直观地组织数据。要在Python中格式化数字,我们常用的方法是**string.format(),**包括浮点数和整数格式化。让我们详细看看如何在Python中格式化浮点数。

Python格式化浮点数

要在Python格式化 浮点数,请使用**format()**方法。format()是一个内置的Python格式化方法,允许多种替换和数值格式化。

让我们举个例子。

x = 211911461911461819112146
y = 2**70

print(x / y)

输出

179.4959901398329

要将浮动值格式化到小数点后两位,使用%.2f。

x = 211911461911461819112146
y = 2**70
z = x / y

print("%.2f" % z)

输出

179.50

要格式化到小数点后三位,使用**%.3f。**

x = 211911461911461819112146
y = 2**70
z = x / y

print("%.3f" % z)

輸出

179.496

你可以看到,当我们只打印两个小数位时,它会自动四舍五入到最接近的整数。但是,打印一个小数点后三位的数字时,仍然不会四舍五入到最近的整数。0.496是按原样打印的,因为我们想要一个小数点后三位的浮动值。

计算机是二进制的,所以它们将浮点数存储为整数,然后将其除以2的幂,并按内存中的值打印。

格式化输出应该允许你根据需要添加填充物,以及添加逗号分隔符等。

使用format()方法

格式规范 "是在格式字符串中包含的替换字段内使用的,以定义单个值的呈现方式。

请看下面的代码。

x = 211911461911461819112146
y = 2**70
z = x / y

print("{:.2f}".format(z))

输出

179.50

输出返回一个字符串。要获得浮动的输出,请使用float()函数。

x = 211911461911461819112146
y = 2**70
z = x / y

print(float("{:.2f}".format(z)))

输出

179.5

用float()方法进行包装,除了去掉小数点后的0,没有任何变化。

在Python中使用round()方法格式化浮动值

round**()是一个内置的Python**方法,它返回四舍五入到小数点后给定数字的浮点数。你可以使用round()方法来格式化浮点数。

x = 211911461911461819112146
y = 2**70
z = x / y

print(round(z, 2))

输出

179.5

但是请注意,round()函数对浮点数的行为在某些情况下可能是令人惊讶的。例如,round(3.575, 2)给出了3.57,而不是预期的3.58。这不是一个错误:这是一个结果,大多数小数的分数不能精确地表示为浮点数。

Python f-strings

Python f 字符串是对以前格式化方法的改进。

让我们使用f-字符串来格式化浮点数。

x = 211911461911461819112146
y = 2**70
z = x / y

print(f'{z:.2f}')

输出

179.50

它对带有运算符的长计算很有效,而且不需要小括号。

Python float格式。完整的表格

数值格式输出描述
3.1415926{:.2f}3.14小数点后2位的浮动格式
3.1415926{:+.2f}+3.14带符号的小数点后2位浮点数格式
-1{:+.2f}-1.00带符号的小数点后2位的格式
2.71828{:.0f}3无小数位的浮动格式
4{:0>2d}04用零来填充数字(左边填充,宽度为2)
4{:x<4d}4xxx用x来填充数字(右边的填充物,宽度为4)
10{:x<4d}10xx带x的焊盘数字(右边的填充物,宽度为4)
1000000{:,}1,000,000带有逗号分隔符的数字格式
0.35{:.2%}35.00%百分比格式
1000000000{:.2e}1.00e+09指数符号
11{:11d}11右对齐(默认,宽度为10)
11{:<11d}11左对齐(宽度为10)
11{:^11d}11中心对齐(宽度为10)

结论

Python 中的大多数数字不能用浮点数准确表示。如果你需要对数字进行四舍五入,因为这是你的数学公式或算法的要求,那么你应该使用 round() 方法。

如果你想把显示限制在一定的精度内,甚至不要使用round,使用%.2f或f-strings或根据你的要求格式化字符串。