Округление до ближайшей половины (НЕ ближайшего целого)

Мне нужно округлить до ближайшего .5. Я не хочу, чтобы число заканчивалось на .0.

Я искал вокруг немного, но кажется, что каждый хочет округлить до ближайшего кратного .5, а не только ближайшую половину, но не целую. Я пробовал делиться на .5, округляя это и умножая на .5, но это все еще округляет до кратных .5. Добавление или вычитание .5 после этого не всегда будет округлять число, в которое оно должно идти (вы можете добавить, когда вы должны были вычесть).

Любая помощь будет принята с благодарностью.

Ответ 1

Вычесть, округлить и добавить...

Math.round(value - 0.5) + 0.5

Еще один рабочий способ, упомянутый в вопросительных комментариях:

Math.floor(value) + 0.5

Ответ 2

Я думаю, что Math.round(num * 2) / 2.0f должен решить округление до ближайшей половины проблемы:

Math.round(3.9 * 2) / 2.0f == 8 / 2.0f = 4.0
Math.round(3.6 * 2) / 2.0f == 7 / 2.0f = 3.5
Math.round(3.1 * 2) / 2.0f == 6 / 2.0f = 3.0

Ответ 3

округление до любой фракции f:

double f = 0.5;
double rounded = f * Math.round(x/f);

Ответ 4

Solution

    PI=3.14159;
DecimalFormat df = new DecimalFormat("##.###");
System.out.println(df.format(PI));

выход: - 3.142