圆环通常是在浮动点数上进行的,在这里,你应当知道三项基本功能:round
。 (四舍五入) http://docs.python.org/library/math.html#math.ceil”rel=“noreferer”>math.ceil
。 (长途)
你们问到的是愤怒和四舍五入到数百,但只要你的人数少于2<>>53,我们仍可使用<条码>。 为了使用<条码>数学.ceil,我们刚刚将头100分,四舍五入,后100分乘:
>>> import math
>>> def roundup(x):
... return int(math.ceil(x / 100.0)) * 100
...
>>> roundup(100)
100
>>> roundup(101)
200
右边两处“临时”两处100处,先拨100个,然后乘以100个。 如果希望四舍五入到十条(n = 1
),则可以使用10**n
而不是100(n = 3
)。
An alternative way to do this is to avoid floating point numbers (they have limited precision) and instead use integers only. Integers have arbitrary precision in Python, so this lets you round numbers of any size. The rule for rounding is simple: find the remainder after division with 100, and add 100 minus this remainder if it s non-zero:
>>> def roundup(x):
... return x if x % 100 == 0 else x + 100 - x % 100
这涉及任何规模的数量:
>>> roundup(100)
100
>>> roundup(130)
200
>>> roundup(1234567891234567891)
1234567891234567900L
我采用了两种解决办法的微型基准:
$ python -m timeit -s import math -s x = 130 int(math.ceil(x/100.0)) * 100
1000000 loops, best of 3: 0.364 usec per loop
$ python -m timeit -s x = 130 x if x % 100 == 0 else x + 100 - x % 100
10000000 loops, best of 3: 0.162 usec per loop
与<代码>数学.ceil解决方案相比,纯粹的分类账解决办法要快两倍。
Thomas建议采用一种与我上述办法相同的基于愤怒的解决办法,但采用乘以诱骗人的价值观。 令人感兴趣的是,这样写法的速度没有好处:
$ python -m timeit -s x = 130 x + 100*(x%100>0) - x%100
10000000 loops, best of 3: 0.167 usec per loop
最后,我要指出,如果你想要打第101-149至100轮,而第150-199至200轮,例如,四舍五入到nearest100,那么就在上架设了<>环形>。 你们可以发挥这一作用:
>>> int(round(130, -2))
100
>>> int(round(170, -2))
200