好的,分两部分:
首先,格式化一个数字:
"{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
旧版本供将来参考结束教育乐趣:
(它仍然更快,因为它不涉及任何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)))
因此,由于描述字符串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))