如何在Python整数中保留前导零以进行字符串格式化

时间:2014-04-26 14:03:25

标签: python

我认为这是一个简单的问题。我有以下代码,输出不是我所期望的:

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 :(得分:2)

数字前面的0对于python并不重要,因为数字没有前导0。您可以使用:

print '%09.2f'%r

答案 1 :(得分: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中存储一个前导零的数字。 这有两种方式:

1)将r设为字符串,即r =" 031408.78"

我认为这对你来说是最好的方法,因为你可以做你想做的所有算术(使用python的隐式类型转换),并且无论你在哪里使用它都会看到附加0的数字。

2)如果您只想打印带前导零的数字,请考虑使用此

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

答案 3 :(得分:0)

对于Python,以下内容没有区别:

31508.78
031508.78
0000000031508.78
31508.7800000000000
0000000000000031508.7800000000000

这些都是完全相同数字的有效表示,由31508.78规范地表示,这基本上只是一种约定。不同的表示也是可能的,实际上,数字的表示方式由IEEE-754 standard描述。

所以,当你想要那个前导零时,你必须明确告诉Python把它放在那里因为它根本不知道它。您刚刚使用了许多有效表示中的一个来指定一个默认字符串表示不包含前导零的数字。

执行此操作的最佳方法是使用字符串格式,它有两种风格。旧样式风格,使用%运算符和较新的str.format函数:

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

或者,如果你实际上并不想要一个数字,你也可以将数字指定为一个字符串,这当然会保持前导零。