如何在Python整数格式化中保留前导零

1 投票
4 回答
5369 浏览
提问于 2025-04-18 04:21

我有一个我认为很简单的问题。我有以下代码,但输出的结果和我预期的不一样:

import socket
import time


r=031508.78
h=373309.9
z=0
mes='"TSRA %s %s %s\r\n"'%(r,h,z)
print mes

我的问题是,r 输出的是 '31508.78',而我想要的是 '031508.78'。我该怎么做才能保留前面的零呢?

4 个回答

0

在Python中,以下这些写法没有任何区别:

31508.78
031508.78
0000000031508.78
31508.7800000000000
0000000000000031508.7800000000000

它们都是同一个数字的有效表示方式,这个数字的标准表示是31508.78,这其实只是一个约定。实际上,还有其他的表示方式,而这个数字的表示方式是根据IEEE-754标准来定义的。

所以,当你想要在数字前面加个零时,你需要明确告诉Python要加上这个零,因为它本身并不知道。你只是用了一种有效的表示方式来指定这个数字,而默认的字符串表示是不包含前导零的。

最好的办法是使用字符串格式化,这里有两种方式。第一种是旧的方式,使用%操作符,第二种是更新的str.format函数:

>>> '%09.2f' % 31508.78
'031508.78'
>>> '{:09.2f}'.format(31508.78)
'031508.78'

或者,如果你根本不想要一个数字,你也可以直接把这个数字作为字符串来指定,这样当然就能保留前导零了。

0

我觉得在Python中没有办法直接存储一个带有前导零的数字。

这让你有两种选择:

1) 把r当成字符串,比如说r="031408.78"

我认为这个方法对你来说是最好的,因为你可以进行所有想要的数学运算(Python会自动帮你转换类型),而且在你使用这个数字的时候,它会一直显示前面的0。

2) 如果你只是想打印出带有前导零的数字,可以考虑使用这个

print "%09.2f' % r  #for this you need the length of the number
1

我更喜欢新的字符串格式迷你语言。我觉得它更直观。

r = 31508.78
h = 373309.9
z = 0

print '"TSRA {0: 011.3f} {1: 011.3f} {2}"\r\n'.format(r, h, z)
print '{0: 011.3f}\n{1: 011.3f}\n{2: 011.3f}'.format(r, h, z)

{0: 011.3f} 这里的0:表示第一个项目(r)。011告诉格式化器总共有11个字符,包括小数点和一个负号的占位符。前面的0表示格式化器会在前面填充零。最后,.3f表示小数点后有固定的三位数字。

结果是:

"TSRA  031508.780  373309.900 0"

 031508.780
 373309.900
 000000.000
2

数字前面的0在Python中并不重要,因为数字是不能有前导0的。你可以这样使用:

print '%09.2f'%r

撰写回答