자바는 모든 수를 올림


146

간단한 질문과 관련하여 내가 찾고있는 답변을 찾을 수없는 것 같습니다 : 가장 가까운 숫자를 int어떻게 반올림 합니까?

예를 들어 숫자가 0.2, 0.7, 0.2222, 0.4324, 0.99999 일 때마다 결과가 1이되기를 원합니다.

지금까지

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

그래도 작업을 수행하지 않는 것 같습니다.


샘플 코드에서 100으로 나누는 이유는 무엇입니까?
Jon Skeet

14
a정수 유형이 있다고 확신합니다 .
Nikita Rybak

1
맞아 a는 int입니다 ... 지적 해 주셔서 감사합니다. 100.0이 나를 위해 정렬했습니다.
Stevanicus

1
나는 그가 원하는 것이 100으로 반올림된다고 추측하지만, 그 질문은 약간의 설명을 사용할 수 있습니다.
Jay

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
"a"가 double 인 경우에만
L.Grillo

^^ "a"는 더블이거나 더블 캐스트 여야합니다.
Codeversed

1
aint이 예에서, 그리고 같은 제안 작품. int / float결과를 수행 할 때 float출력에서 설명 된대로입니다. 링크를 사용해보십시오.
dantiston

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

a를 double로 가정하면 소수점 이하 자릿수가없는 둥근 숫자가 필요합니다. Math.round () 함수를 사용하십시오.
이것은 나의 해결책으로 간다.

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

Output : 
a:1

1
a = 0.2이면 결과는 0이 될 것입니다.
Mohamed23gharbi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.