さて、2 つの部分:
まず、数値をフォーマットします。
"{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)
最初の 10 進数の桁に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 文字の長さなので、-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))