Округление чисел: Java 'Math.rint' в Python - PullRequest
1 голос
/ 29 марта 2012

Существует ли аналог Python Math.rint в Java? Если нет, как я могу достичь того же результата?

Ответы [ 2 ]

3 голосов
/ 29 марта 2012

Вот точное значение для rint для Python 2:

def rint(num):
    """Rounds toward the even number if equidistant"""
    return round(num + (num % 2 - 1 if (num % 1 == 0.5) else 0))

print rint(-1.4) == -1.0
print rint(-1.5) == rint(-2.0) == rint(-2.5) == -2.0
print rint(1.4) == 1.0
print rint(1.5) == rint(2.0) == rint(2.5) == 2.0

В Python 3 round округляется до точно так же, как rint (спасибо @lvc), но в Python 2:

round(x[, n])

Возвращает значение с плавающей запятой x, округленное до n цифр после запятой. Если n опущено, по умолчанию используется ноль. Результатом является число с плавающей запятой. Значения округляются до ближайшего кратного 10 к степени минус n; если два множителя одинаково близки, округление производится вдали от 0 (например, round(0.5) равно 1.0 и round(-0.5) равно -1.0).

Примечание

Поведение round() для чисел с плавающей запятой может быть удивительным: например, round(2.675, 2) дает 2.67 вместо ожидаемого 2.68. Это не ошибка: это результат того факта, что большинство десятичных дробей не могут быть представлены точно как число с плавающей точкой. См. Арифметика с плавающей точкой: проблемы и ограничения для получения дополнительной информации.

0 голосов
/ 29 марта 2012

Вы можете использовать встроенную функцию round:

  • round(3.5) дает 4.0
  • round(3.4) дает 3.0
  • round(3.6) дает 4.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...