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

Gre*_*y D -2 python

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

 1, 10, 100, 1000, 10000
Run Code Online (Sandbox Code Playgroud)

我需要的是最终的6个字符的数字,所以这是每个数字的答案

1     => 000001
10    => 000010
100   => 000100
1000  => 001000
10000 => 010000
Run Code Online (Sandbox Code Playgroud)

所以我需要将长度设置为6位,输入数字并在前面加"0"直到它是6位数.

我怎样才能做到这一点?

除此之外,如果有人输入200,我需要它向下舍入到100,如果他们输入501,则向上舍入到1000; 这也可以吗?

Man*_*ert 7

好的,有两个部分:

首先,格式化一个数字:

"{number:06}".format(number=100)
Run Code Online (Sandbox Code Playgroud)

会给你的'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))
Run Code Online (Sandbox Code Playgroud)

让我们来看看:

>>> print rep(100)
000100
>>> print rep(1000)
001000
>>> print rep(501)
001000
>>> print rep(499)
000100
>>> print rep(500)
000100
Run Code Online (Sandbox Code Playgroud)

旧版本为未来参考教育的乐趣:

(它仍然更快,因为它不涉及任何log操作)

这是一个巧妙的小技巧:round(501)将四舍五入到第一个十进制数字,但round(501, -1)将向10^1数字(结果为500.0)舍入round(501, -2)到10^2(结果仍然是500.0),并将round(501, -3)向上舍入到1000.

因此,我们希望将500舍入到1000,但将53舍入到100.嗯,这是我们如何做到的:

number = 521
rounded = round(number, -len(str(number)))
Run Code Online (Sandbox Code Playgroud)

因此,由于描述的字符串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))
Run Code Online (Sandbox Code Playgroud)