Как мне округлить число с плавающей запятой, но сохранить его числом с плавающей запятой (т.е. без преобразования его в целое число)?

например, у меня есть результат площади круга = 4,3, мой вопрос: «когда я получаю число больше 0,5 [например (4,6, 4,7, 4,8, 4,9)], я хочу, чтобы он дал мне 5,0, но если меньше .5 [4.4, 4.3, 4.2, 4.1] потом покажи мне 4.0'

я пробовал Math.round(), но он преобразует float в int, как [4], но я не хочу преобразовывать его в int

Есть ли способ сделать это?

вот мой код:

private float radius;
private double result;

public void show(float x)
{
    this.radius = x;
    this.result=Math.pow(x,2)*Math.PI;

    System.out.println("result is: "+result);
}

ясно, я хочу, чтобы оба метода (Math.floor()) и (Math.ceil()) были в одной функции, спасибо


person mhamad arsalan    schedule 15.01.2018    source источник
comment
Math.round(4.5f) вернет 5 и сделает именно то, что вы хотите. И преобразовать int в float/double на самом деле совсем не сложно.   -  person OH GOD SPIDERS    schedule 15.01.2018
comment
В качестве альтернативы, поскольку вы знаете, что площадь всегда будет положительной, вы можете использовать Math.floor( area + .5 ).   -  person Thomas    schedule 15.01.2018
comment
(float)Math.round(x) снова делает int числом с плавающей запятой. Однако float и double являются приближением (суммы степеней 2) без фиксированного числа десятичных знаков, а 5.3 на самом деле имеет небольшую ошибку, 10000 * 5,3 не будет точно 53000.   -  person Joop Eggen    schedule 15.01.2018
comment
@OHGODSPIDERS спасибо, =)   -  person mhamad arsalan    schedule 15.01.2018
comment
@ Томас, вау, это именно то, что я хочу! большое спасибо   -  person mhamad arsalan    schedule 15.01.2018
comment
@Dukeling да, это работает, но я не хочу преобразовывать float в int, я хочу сохранить точку с плавающей запятой, например (если точка ≥ .5, пол, а если точка ‹ .5, ceil) спасибо   -  person mhamad arsalan    schedule 15.01.2018
comment
@JoopEggen спасибо, это работает =), но для (10000 * 5.3) я попробовал калькулятор Windows, и он дает мне ровно 53000! Я не знаю, есть ли в Windows собственный обработчик исключений.   -  person mhamad arsalan    schedule 15.01.2018
comment
Калькулятор Windows внутри не использует float/double, а что-то вроде BigDecimal в java.   -  person Joop Eggen    schedule 15.01.2018
comment
@Dukeling спасибо :)   -  person mhamad arsalan    schedule 15.01.2018
comment
@JoopEggen это странно для меня, я имею в виду, что я новичок в программировании на Java, я абсолютно не понимаю, что вы имеете в виду (внутренний калькулятор Windows не использует float/double) (извините за это) или, может быть, потому что мой английский плохой (я не слишком много понимаю по-английски). извините, спасибо :)   -  person mhamad arsalan    schedule 15.01.2018
comment
Чтобы избежать более точных вычислений с точностью до запятой, в java есть класс BigDecimal. Там 12.01 * 4.0 ровно 48.040. (Кстати, только около 10% людей в мире хорошо говорят по-английски, и их число постепенно уменьшается.)   -  person Joop Eggen    schedule 15.01.2018
comment
@JoopEggen спасибо за помощь, кажется, я понял   -  person mhamad arsalan    schedule 16.01.2018


Ответы (1)


Math.rint, вероятно, ближе всего к тому, что вы ищете. Обратите внимание, что он округляет половину до четного.

person Simon Byrne    schedule 16.01.2018