Java округлить любое число


146

Кажется, я не могу найти ответ, который ищу, относительно простого вопроса: как мне округлить любое число до ближайшего int?

Например, всякий раз, когда число равно 0,2, 0,7, 0,2222, 0,4324, 0,99999, я бы хотел, чтобы результат был 1.

Пока у меня есть

int b = (int) Math.ceil(a / 100);

Похоже, это не делает работу.


Почему вы делите на 100 в вашем примере кода?
Джон Скит

14
Могу поспорить, у вас aесть целочисленный тип.
Никита Рыбак

1
да, ты прав, это инт ... спасибо за указание на это. 100.0 разобрали это для меня.
Стеваникус

1
Я предполагаю, что он хочет округлить / 100, но да, вопрос может использовать некоторые уточнения.
Джей

1
ПРИМЕЧАНИЕ: на этот вопрос даны лучшие ответы.
martijnn2008

Ответы:


289

Math.ceil()правильная функция для вызова. Я предполагаю , что aэто int, что сделаетa / 100 выполнить целочисленную арифметику. Попробуй Math.ceil(a / 100.0)вместо этого.

int a = 142;
System.out.println(a / 100);
System.out.println(Math.ceil(a / 100));
System.out.println(a / 100.0);
System.out.println(Math.ceil(a / 100.0));
System.out.println((int) Math.ceil(a / 100.0));

Выходы:

1
1.0
1.42
2.0
2

Смотрите http://ideone.com/yhT0l


3
это только если «а» удваивается
L.Grillo

^^ «а» должен быть двойным или двойным.
Codeversed

1
aЭто intв этом примере, и он работает как предложено. При выполнении, int / floatрезультат float, как показано в выводе. Попробуйте ссылку.
Дантистон

16

Я не знаю, почему вы делите на 100, но здесь мое предположение int a;

int b = (int) Math.ceil( ((double)a) / 100);

или

int b = (int) Math.ceil( a / 100.0);

11
int RoundedUp = (int) Math.ceil(RandomReal);

Это, казалось, сделало идеальную работу. Работал каждый раз.


2

10 лет спустя, но эта проблема все еще поймала меня.

Так что это ответ на те, которые слишком поздно, как я.

Это не работает

int b = (int) Math.ceil(a / 100);

Потому что результат a / 100оказывается целым числом и округляется, поэтому Math.ceil ничего не может с этим поделать.

Вы должны избегать округленной операции с этим

int b = (int) Math.ceil((float) a / 100);

Теперь это работает.


0

Самый простой способ сделать это просто: вы получите float или double и захотите, чтобы он конвертировал его в ближайший раунд, тогда просто сделайте, чтобы System.out.println((int)Math.ceil(yourfloat)); он работал отлично


-3

Предполагая двойное число, и нам нужно округленное число без десятичного знака. Используйте функцию Math.round ().
Это идет как мое решение.

double a = 0.99999;
int rounded_a = (int)Math.round(a);
System.out.println("a:"+rounded_a );

Output : 
a:1

1
Это неправильный ответ, поскольку здесь предлагается округлить UP, если a = 0,2, результат будет 0
Mohamed23gharbi
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.