Следующий код работает Идеально во всех случаях за исключением отрицательных чисел :
Код: Выделить всё
def roundhalfup(x: Fraction) -> int:
"Returns the closest integer to x, with exact ties rounded up"
#assert not x < 0, ValueError("Negative numbers not implemented")
return int(x + Fraction(1, 2))
def divroundhalfup(a: int | Fraction, b: int | Fraction) -> int:
return roundhalfup(Fraction(a, b))
< /code>
Например, он успешен: < /p>
[*] (5, 3) → 2 < /li>
(4, 3) → 1
[*] (1, 1) → 1
[*] (2, 3) → 1
(1, 2) → 1 < /li>
(1, 3) → 0 < /li>
(0, 1) → 0
[*] (-1, 3) → 0
[*] (-1, 2) → 0
Но он не работает на < /p>
( -2, 3) → 0 [должно быть -0,6̅ → -1] < / li>
( -3, 3) → 0 [должно быть -1 → -1] < /li>
( -4, 3) → 0 [должен быть -1,3 ̅ → -1] < /li>
( -5, 3) → -1 [должно быть -1,6̅ → -2] < /li>
< /ul>
Я знаю, что это может быть Kludged, используя Decimal
Подробнее здесь: https://stackoverflow.com/questions/679 ... th-half-up