擅长:python、mysql、java
<p>这里有一个使用<code>round</code>的解决方案。
虽然由于<a href="https://docs.python.org/3/library/fractions.html#fractions.Fraction.__round__" rel="nofollow noreferrer">^{<cd2>}</a>执行的是“向偶数取整”而不是“向上取整”,但它有点花哨:</p>
<pre class="lang-py prettyprint-override"><code>from fractions import Fraction
def round_half_up(x: Fraction):
if x.denominator == 2:
if x.numerator % 2:
return round(x + Fraction(1/2))
else:
return round(x)
X = [(5, 3), (4, 3), (1, 1), (2, 3), (1, 2), (1, 3), (0, 1), (-1, 3), (-1, 2),
(-2, 3), (-3, 3), (-4, 3), (-5, 3),
(3, 2)]
for x in X:
f = Fraction(*x)
print(f"{x}\t-> {round_half_up(f)}")
</code></pre>
<p>输出:</p>
<pre><code>(5, 3) -> 2
(4, 3) -> 1
(1, 1) -> 1
(2, 3) -> 1
(1, 2) -> 1
(1, 3) -> 0
(0, 1) -> 0
(-1, 3) -> 0
(-1, 2) -> 0
(-2, 3) -> -1
(-3, 3) -> -1
(-4, 3) -> -1
(-5, 3) -> -2
(3, 2) -> 2
</code></pre>