擅长:python、mysql、java
<p>最快的方法是除以5,四舍五入,然后乘以5。这完全是数学上的事实,它会起作用</p>
<p><code>5*round(n/5)</code></p>
<p>而且不需要if语句来决定何时使用<code>floor</code>或<code>ceil</code>,因为<code>round</code>已经默认为这个逻辑</p>
<p>编辑:正如所指出的,这适用于除2.5结尾的值之外的所有值,当需要进行舍入时(在实践中,许多示例不需要这样做)</p>
<p>由于Ashwin的回答已经完成了这一点,我将给出一个修复,在一行中完成它,而不使用函数定义,尽管它并不漂亮:</p>
<pre><code>5 * (int(x/5) + 1 - round(x/5 % 1))
</code></pre>
<p>或使用<code>ceil</code>稍微清洁:</p>
<pre><code>5*(math.ceil(x/5) - round(x/5 % 1))
</code></pre>
<p>利用这个事实,round的行为就像我们从上面所希望的那样。
更好的是,定义:</p>
<pre><code>def my_round(x): return int(x + 1) - round(x % 1)
def round5(x): return 5*my_round(x/5)
</code></pre>
<p>“修复”round函数并在两行中创建一个漂亮的<code>round5</code>函数。这就是我要做的</p>