Округление рационального числа до ближайшего целого числа, с полупредаPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Округление рационального числа до ближайшего целого числа, с полупреда

Сообщение Anonymous »

Учитывая рациональное число, мне нужно получить ближайшее целое число, с точными половинками, округленными up (то есть к положительной бесконечности). Результаты должны быть точными , которые исключают float и decimal , оба из которых имеют конечную точность.
Следующий код работает Идеально во всех случаях за исключением отрицательных чисел :

Код: Выделить всё

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 
с Round_half_up и decimal.getContext (). возможный. Как это можно сделать без какого -либо округления - чисто интегрально?


Подробнее здесь: https://stackoverflow.com/questions/679 ... th-half-up
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»