Java: функция округления от нуля? - PullRequest
6 голосов
/ 23 апреля 2020

Как округлить двойное число до нуля в Java?

Операции, которые я знаю, не делают то, что я хочу:

  • Приведение его к (int) округляет до нуля. (int) 3.7 будет 3, (int) - 3.9 будет -3.

  • Math.floor() раундов в сторону минус бесконечности. Math.ceil(3.7) будет 3.0, Math.ceil(-3.9) будет -4.0.

  • Math.ceil() раундов в сторону плюс бесконечность. Math.floor(3.7) будет 4.0, Math.ceil(-3.9) будет -3.0.
  • Math.round() округляется до ближайшего целого числа.

Однако у меня нет чего-то такого округляется от нуля, так что 3.7 становится 4.0, а -3.9 становится -4.0.

Есть ли такая функция в Java?

Ответы [ 3 ]

8 голосов
/ 23 апреля 2020

Проверьте знак числа:

double roundedAway = (num >= 0) ? Math.ceil(num) : Math.floor(num)
3 голосов
/ 23 апреля 2020

Вы можете реализовать свою собственную функцию на основе положительного или отрицательного числа или использовать RoundingMode . Он может округляться от нуля с помощью UP

Это может выглядеть примерно так

DecimalFormat df = new DecimalFormat("#.#");
df.setRoundingMode(RoundingMode.UP);
System.out.println(df.format(number_here));
1 голос
/ 23 апреля 2020

Это может быть сделано с RoundingMode и BigDecimal:

double roundAway(double value) {
    return new BigDecimal(value).setScale(0, RoundingMode.UP).doubleValue();
}

Примечание: это преобразует double в BigDecimal с точным значением double. Чтобы избежать этого, вы можете использовать BigDecimal.valueOf(double) вместо конструктора, который будет использовать каноническое строковое представление типа double, но, так как вы собираетесь округлить его до целого числа, это потребует ненужного преобразования в строку. См. документацию конструктора для получения более подробной информации.

...