Java Zaokrąglij dowolną liczbę

146

Nie mogę znaleźć odpowiedzi, której szukam, w związku z prostym pytaniem: jak zaokrąglić dowolną liczbę do najbliższej int?

Na przykład, ilekroć liczba wynosi 0,2, 0,7, 0,2222, 0,4324, 0,99999, chciałbym, aby wynikiem było 1.

Jak dotąd mam

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

Jednak wydaje się, że to nie działa.

Stevanicus
źródło
Dlaczego w przykładowym kodzie dzielisz przez 100?
Jon Skeet
14
Założę się, aże masz typ liczby całkowitej.
Nikita Rybak
1
tak, masz rację a to int ... dzięki za zwrócenie uwagi. 100.0 załatwiło to dla mnie.
Stevanicus
1
Domyślam się, że to, czego chce, to zaokrąglenie / 100, ale tak, pytanie może wymagać wyjaśnienia.
Jay
1
UWAGA: na to pytanie podano lepsze odpowiedzi.
martijnn2008

Odpowiedzi:

289

Math.ceil()jest właściwą funkcją do wywołania. Zgaduję, że ajest to int, co spowodowałoby a / 100wykonanie arytmetyki całkowitej. Spróbuj Math.ceil(a / 100.0)zamiast tego.

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));

Wyjścia:

1
1.0
1.42
2.0
2

Zobacz http://ideone.com/yhT0l

moinudin
źródło
3
to tylko wtedy, gdy „a” jest podwójne
L.Grillo,
^^ „a” musi być podwójnym lub rzutowanym podwójnym.
Codeversed
1
ajest intw tym przykładzie i działa zgodnie z sugestią. Podczas wykonywania int / floatwynikiem jest a float, jak pokazano na wyjściu. Wypróbuj link.
dantiston
16

Nie wiem, dlaczego dzielisz przez 100, ale tutaj moje założenie int a;

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

lub

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

źródło
11
int RoundedUp = (int) Math.ceil(RandomReal);

Wydawało się, że to działa idealnie. Pracował za każdym razem.

Liehan Els
źródło
2

10 lat później, ale ten problem wciąż mnie złapał.

Więc to jest odpowiedź dla tych, którzy są za późno jak ja.

To nie działa

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

Ponieważ wynik a / 100okazuje się być liczbą całkowitą i jest zaokrąglony, więc Math.ceil nie może nic z tym zrobić.

Musisz przy tym unikać zaokrąglania operacji

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

Teraz działa.

Reginaldo Rigo
źródło
0

Najłatwiej to zrobić: otrzymasz zmiennoprzecinkowy lub podwójny i chcesz, aby przekształcił go w najbliższe zaokrąglenie, a następnie po prostu zrób System.out.println((int)Math.ceil(yourfloat)); to, będzie działać idealnie

LouieAdauto
źródło
-3

Zakładając, że podwójna i potrzebujemy zaokrąglonej liczby bez miejsca po przecinku. Użyj funkcji Math.round ().
To jest moje rozwiązanie.

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

Output : 
a:1
Ankit Chauhan
źródło
1
To jest zła odpowiedź, ponieważ w tym miejscu należy zaokrąglić w górę, jeśli a = 0,2, wynik będzie
równy