Python 打印数字时如何控制位数?

Python 打印数字时如何控制位数?,python,Python,我需要一个代码的帮助,最终答案需要6个字符,我向此人询问一个号码,他们可以输入以下内容: 1, 10, 100, 1000, 10000 我需要的是最终的数字是6个字符长,所以这是每个数字的答案 1 => 000001 10 => 000010 100 => 000100 1000 => 001000 10000 => 010000 所以我需要将长度设置为6位,输入数字并在前面加0,直到它是6位 我该怎么做 除此之外,如果有人输入200,我

我需要一个代码的帮助,最终答案需要6个字符,我向此人询问一个号码,他们可以输入以下内容:

 1, 10, 100, 1000, 10000
我需要的是最终的数字是6个字符长,所以这是每个数字的答案

1     => 000001
10    => 000010
100   => 000100
1000  => 001000
10000 => 010000
所以我需要将长度设置为6位,输入数字并在前面加0,直到它是6位

我该怎么做

除此之外,如果有人输入200,我需要将其四舍五入到100,如果他们输入501,则将其四舍五入到1000;也可以这样做吗?

好的,两部分:

首先,要格式化一个数字:

"{number:06}".format(number=100)
将给您“000100”。但在那之前,我们必须绕道而行

编辑:此解决方案更加优雅:

import math
def rep(number):
    rounded = 10**(math.floor(math.log(number,10)-math.log(0.5,10)))
    return "{number:06}".format(number=int(rounded))
让我们看看:

>>> print rep(100)
000100
>>> print rep(1000)
001000
>>> print rep(501)
001000
>>> print rep(499)
000100
>>> print rep(500)
000100
旧版本供将来参考,最终版本:

它更快,因为它不涉及任何日志操作

这里有一个巧妙的小技巧:round501将四舍五入到小数点后的第一位,但是round501,-1将四舍五入到10^1位,因此结果是500.0,round501,-2将四舍五入到10^2,结果仍然是500.0,而round501,-3将四舍五入到1000

所以我们希望500四舍五入到1000,但是53四舍五入到100。好吧,我们是这样做的:

number = 521
rounded = round(number, -len(str(number)))
因此,由于描述数字的字符串有三个字符长,我们将其四舍五入为-3

然而,这是完美的四舍五入,但是如果我们四舍五入,它总是四舍五入到0。让我们来看看这个例子:

def rep(number):
    rounded = round(number, -len(str(number)))
    if not rounded: # 0 evaluates to False
        rounded = 10**(len(str(number))-1)
    return "{number:06}".format(number=int(rounded))
也可以帮你

>>> str(10).zfill(6)
'000010'

为了完整起见:

>>> for i in range(6):
...   "%06d" % 10**i
将打印

'000001'
'000010'
'000100'
'001000'
'010000'
'100000'

这些是旧的字符串格式运算符。在新代码中,建议使用新的.format方法。请您解释一下在这种情况下使用新的.format方法比使用旧的字符串格式运算符有什么好处?提前感谢。Python2.7说:这种字符串格式化方法是Python3中的新标准,应该优先于新代码中的%格式化[…]新的选项比旧的更强大、更通用、更容易阅读,而且更酷。不过,我认为你的答案不值得投反对票。因此,我建议+1来平衡这一点:好吧,对于几乎所有人来说,旧版本更紧凑、更熟悉,而对于那些将阅读或维护您的代码的人来说,这些版本更容易让人刮目相看。我不是说一个人不应该使用新的选项。知道在代码中选择一个而不是另一个的确切原因真的很好。文件上说这是一个很好的理由,但在很多情况下还不够好。谢谢你的投票!如其他答案所述,对于新代码中的字符串格式,强烈建议使用str.format方法而不是模运算符。这个答案也应该是对另一个答案的编辑,反过来说。我的回答是12:06,其他关于模运算符的回答是12:07。我先到那儿-“编辑”下面的所有内容均指被@Tim Task:200->000100501->001000删除的问题的第二部分。我已还原该部分问题。
>>> print "%06d" % 1
000001
>>> print "%06d" % 10
000010
>>> print "%06d" % 100
000100
>>> print "%06d" % 1000
001000
>>> print "%06d" % 10000
010000
>>> print "%06d" % 100000
100000